为什么说现在用传统爬虫爬取数据已经逐渐退出舞台了? 我们当然知道现在代码由于AI的逐渐强大,变得越来越好写。有数不清的简单爬虫方法的情况下,代码的可读性和复杂性都远低于传统爬虫代码。我们完全可以在一个项目里完成多个项目的功能。
在这种环境下,你还使用传统爬虫,就像游戏里,你明明有空投枪可以用,你却偏偏要用小手枪。
今天我们就来介绍一个能把AI与爬虫结合起来的一个库:x-crawl。它的强大,在使用之后你就会懂的。
x-crawl
x-crawl 是 Node.js 的辅助爬虫库。有灵活的使用方式和强大的 AI 辅助功能,使爬虫工作变得更加高效、智能和便捷。
一般我们只使用其中的两个功能,OpenAI和爬虫。
为什么说它是多功能的呢?
支持爬动态页面、静态页面、接口数据以及文件数据
灵活性高:单个爬取 API 都适配多种配置,每种配置方式都各有千秋。
实战
介绍完毕后,我们直接开始实战。开着车就往房区横冲直撞,不吃鸡今天不能休息。
万变不离其宗,还是老样子,初始化和安装依赖。想要吃鸡,第一步,跳伞必须得最快。
npm init -y
在生成的package.json文件中,加入依赖:
"dependencies": {
"x-crawl":"^10.0.2"
}
并把最上方的版本号改为:
"version": "0.0.1"
随后再到终端输入npm i 安装...
这样最适合使用,此时完成第一步,你可以跟队友说了:兄弟们我一伞,跳精标,这把吃了!
版本号
这里拓展一下:版本号有什么意义呢?
- 1.0.0 1主版本 0次更新 0 bug修复
- 2.0.0 版本大更新
- 2.2.0 添加了某项功能
- 2.2.1 bug 修复 第一位代表一个程序的版本,就像游戏更新赛季一样。一般都有着影响游戏模式的更新。
第二位代表更新了游戏中的某个部分,但不影响主要的部分。就像特殊时期增添了一些特殊模式。
第三位代表修改了某些bug,还依稀记得2年前,LOL秒杀大龙只需要一枪,比日本那位都要脆一点...也可以叫做热补丁,需要紧急修改。
一个成熟的程序,肯定有过多次的版本更迭,让自身的功能更加完善。
主程序
正式开始第一步,导包:
import{
createCrawl, // 返回爬虫实例
createCrawlOpenAI // openai 配置项
} from 'x-crawl';
这里我们从x-crawl中解构出了两个方法
const [coach,...players] =["米卢","李铁","孙继科","范志毅"]
// ... rest 运算符
console.log(coach,players)
依稀记得国足世界杯啊,米卢教练,范大将军,李铁等球员。我们可以用 结构运算符... 也叫拓展符。
这里的意思是第一个设置为教练,...后面的为players。
想要完成爬虫,先实例化一个爬虫项目再说吧...
const crawlApp = createCrawl({
maxRetry:3, // 最多请求三次连接
intervalTime:{ max:2000 , min:1000 } // 请求的时间间隔
})
男人好像总是对次数十分敏感
想要用openAI,咱们得用上api和大模型吧...
const crawlOpenAIApp = createCrawlOpenAI({
clientOptions:{
apiKey:'你自己的apikey',
baseURL:'自己的转发地址'
},
defaultModel:{
chatModel:'gpt-4-turbo-preview', // 使用的模型
}
})
心都在滴血啊,居然用gpt4,家里有矿吗...杀鸡焉用牛刀,嗄个人机难道还要用我的AWM?
如果有不会弄apikey和转发地址的,可以私信...
crawlApp.crawlPage('https://movie.douban.com/chart') // 发送请求
又是这哥们,每次示范爬虫好像都是爬豆瓣...
.then(async (res) => { const { page, browser } = res.data; // 处理响应
页面交互和浏览器属性
await page.waitForSelector(targetSelector);
const highlyHTML = await page.$eval(
targetSelector,
(el) => el.innerHTML );
等待选择器和提取html内容 AI爬虫核心就是解析indent,打开网页源码找到indent,就是我们要爬取的内容了...
好似开了DMA,游戏刚开始就知道最后的圈刷在哪里...
const result = await crawlOpenAIApp.parseElements(
highlyHTML,
`获取图片链接,电影名称,电影评分,电影简介
输出格式为json 数组
如:[{
"src":"....",
"title":"....",
"score":"....",
"desc":"...."
}]
`
)
browser.close();
console.log(result)
要想AI 用的好,prompt是关键!
意识够好,枪不准也没用啊。
此时我们已经挺进决赛圈,能不能吃鸡就看这一运行了...
激动的心颤抖的手...
好在完美运行了,终于可以下班了。这队友还是很给力的...
前几篇文章讲到了用cursor生成爬虫
现在又是另一个方法。
希望大家从中收获些什么...
这里源码附上,求个三连...
// es6 模块化 导包
// 结构运算符
import{
createCrawl, // 返回爬虫实例
createCrawlOpenAI // openai 配置项
} from 'x-crawl';
// 实例化爬虫应用
const crawlApp = createCrawl({
maxRetry:3,
intervalTime:{ max:2000 , min:1000 }
})
const crawlOpenAIApp = createCrawlOpenAI({
clientOptions:{
apiKey:'你自己的apikey',
baseURL:'自备转发地址'
},
defaultModel:{
chatModel:'gpt-4-turbo-preview',
}
})
crawlApp.crawlPage('https://movie.douban.com/chart')
.then(async(res)=>{
const { page , browser }= (res.data);
const targetSelector = '.indent';
await page.waitForSelector(targetSelector);
const highlyHTML = await page.$eval(
targetSelector,
(el) => el.innerHTML
)
const result = await crawlOpenAIApp.parseElements(
highlyHTML,
`获取图片链接,电影名称,电影评分,电影简介
输出格式为json 数组
如:[{
"src":"....",
"title":"....",
"score":"....",
"desc":"...."
}]
`
)
browser.close();
console.log(result)
})
希望大家做成一夜七次郎,把把吃鸡...