什么?2025年了还在写传统爬虫!来试试更有爽感的AI爬虫 ψ(`∇´)ψ

在数据抓取领域,传统爬虫一直占据着重要地位。传统爬虫基于规则进行数据抓取,通过识别网页中的特定元素,如类名、标签或结构,来定位和提取所需信息。然而,随着互联网的飞速发展,网站结构日益复杂且频繁变动,传统爬虫的局限性逐渐凸显。一旦网站更新,改变了原有的类名、标签或结构,传统爬虫就可能失效,导致数据抓取失败或错误。

这时,AI 爬虫应运而生,为数据抓取带来了全新的解决方案。AI 爬虫借助人工智能技术,能够智能解析网页、自适应变化,展现出更高的灵活性和准确性。今天,就让我们一起来深入了解 AI 爬虫,并用实际代码来感受它的强大魅力。

AI 爬虫初体验:以爬取豆瓣热榜电影信息为例

我们选用大家熟悉的豆瓣电影榜来进行示范,而爬虫则使用 x - crawl 这个结合了传统爬虫技术和 AI 算法的 Web 数据采集框架。它为开发者提供了灵活的接口和丰富的特性,非常适合用来爬取复杂多变的网站。

1. 导包

首先,我们创建 index.mjs 文件,使用 ES6 语法进行导包,以便更好地进行后期维护。代码如下:

javascript 复制代码
import { 
    createCrawl,
    createCrawlOpenAI 
} from "x - crawl";

这里从 x - crawl 库中导入了 createCrawl 和 createCrawlOpenAI。createCrawl 用于返回爬虫实例,createCrawlOpenAI 则是 openai 配置项。

2. 实例化爬虫

接下来,我们需要实例化爬虫应用:

yaml 复制代码
const crawlApp = createCrawl({
    maxRetry: 3, // 最大重试次数
    intervalTime: { max: 2000, min: 1000 } // 重试间隔时间
});

通过 createCrawl 创建了一个名为 crawlApp 的实例对象,并设置了最大重试次数为 3 次,重试间隔时间在 1000 毫秒到 2000 毫秒之间。这样设置可以在网络不稳定等情况下,保证爬虫有一定的重试机会,并且合理控制重试间隔,避免对目标服务器造成过大压力。

同时,我们还需要实例化 OpenAI:

php 复制代码
const crawlOpenAI = createCrawlOpenAI({
    clientOptions: { 
        apiKey: "sk - yourKey",
        baseURL: "https://api.302.ai/v1/"
    },
    defaultModel:{
        chatModel: "gpt - 4 - turbo - preview",
    }
});

通过 createCrawlOpenAI 创建了 crawlOpenAI 实例对象。clientOptions 用于设置创建客户端时的一组配置选项,这里设置了 APIkey 和 baseURL 等基础选项。defaultModel 用于设置初始模型,我们选择了 chatModel 中的 gpt - 4 - turbo - preview 模型,这个模型能够帮助我们更好地处理网页内容的解析。

3. 发送爬取请求并处理结果

一切准备就绪后,我们开始发送爬取请求:

ini 复制代码
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
        );

调用 crawlApp 上的 crawlPage 方法,打开豆瓣热门电影的网页并返回一个 Promise,其中包含页面对象和其他信息。使用 .then 来处理这个 Promise,当页面加载完成并且解析完 Promise,就会执行回调函数中的代码。这里的回调函数使用了 async 关键字,表示它是异步的,允许我们使用 await 来等待其他 Promise 操作。

通过解构的方法从 res.data 中提取出 page 和 browser 对象。page 是一个 Puppeteer 页面实例,代表当前加载的网页;browser 则是浏览器实例,可用于管理整个浏览器会话。

定义了一个 CSS 选择器字符串 '.indent',根据豆瓣电影排行榜页面的设计,.indent 可能是用来包裹电影列表内容的 HTML 元素。使用 page.waitForSelector() 方法等待直到页面中出现与 targetSelector 匹配的元素,确保在继续下一步之前,页面已经完全加载并渲染了所需的元素。

然后使用 page.$eval,将选择器 targetSelector 和一个函数作为参数。它首先查找与给定选择器匹配的第一个元素,然后在这个元素上下文中执行提供的函数,并将结果返回给调用者。这里通过 el.innerHTML 获取了由 .indent 选择器选中的第一个元素内部的 HTML 内容,并将其赋值给变量 highlyHTML。

接下来,我们利用 OpenAI 来解析提取到的 HTML 内容:

sql 复制代码
const result = await crawlOpenAI.parseElements( 
    highlyHTML,
    `
    获取图片链接、电影名称、电影评分、电影简介,
    输出格式为json数组。
    例如:
    [
        {
            "src": "图片链接",
            "title": "电影名称",
            "score": "电影评分",
            "desc": "电影简介"
        }
    ]
    `
)
browser.close();
console.log(result);

调用 crawlOpenAI 对象的 parseElements 方法,解析爬取的内容(highlyHTML)并提取出我们需要的图片链接、电影名称、电影评分、电影简介等信息,以 JSON 数组的形式返回。最后用 browser.close() 关闭浏览器,并将结果打印到控制台。

4. 保存爬取的文件(可选步骤)

如果我们还想保存爬取到的图片等文件,可以继续使用以下代码:

php 复制代码
crawlApp.crawlFile({
    targets: result.elements[0].src,
    storeDirs: "./upload",
})

这里通过 crawlApp 的 crawlFile 方法,将结果中第一个元素的图片链接(result.elements[0].src)对应的文件保存到 ./upload 目录下。

完整代码与效果展示

完整代码如下

js 复制代码
// es6 模块化 导包
// 解构运算符
import { 
    createCrawl,
    createCrawlOpenAI 
} from "x-crawl";

// 实例化爬虫
const crawlApp = createCrawl({
    maxRetry: 3, // 最大重试次数
    intervalTime: { max: 2000 , min: 1000 }, // 重试间隔时间
});
const crawlOpenAI = createCrawlOpenAI({
    clientOptions: { 
        apiKey: "sk-yourKey" ,
        baseURL: "https://api.302.ai/v1/"
    },
    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 crawlOpenAI.parseElements( 
            highlyHTML,
            `
            获取图片链接、电影名称、电影评分、电影简介,
            输出格式为json数组。
            例如:
            [
                {
                    "src": "图片链接",
                    "title": "电影名称",
                    "score": "电影评分",
                    "desc": "电影简介"
                }
            ]
                
            `
        )
        browser.close();
        console.log(result);
        crawlApp.crawlFile({
            targets: result.elements[0].src,
            storeDirs: "./upload",
        })
    })

效果展示

AI 爬虫的原理剖析

从上述代码示例中,我们可以初步窥探 AI 爬虫的原理。在传统爬虫获取网页 HTML 内容的基础上,AI 爬虫利用自然语言处理等人工智能技术来进一步处理这些内容。

以我们使用的 x - crawl 和 OpenAI 结合的方式为例,当获取到网页特定部分的 HTML(如 highlyHTML)后,OpenAI 的模型(如 gpt - 4 - turbo - preview)能够理解我们以自然语言形式给出的指令(如 "获取图片链接、电影名称、电影评分、电影简介,输出格式为 json 数组")。模型通过对 HTML 内容的语义分析,识别出其中与电影相关的元素,并按照我们要求的格式提取和整理信息。

与传统爬虫固定的规则匹配方式不同,AI 爬虫的模型经过大量数据的训练,能够理解网页内容的语义和逻辑关系。即使网页结构发生变化,只要内容的语义不变,AI 爬虫依然有可能准确地提取出我们需要的数据。这就大大提高了爬虫的适应性和准确性,尤其是在面对复杂多变的现代网站时,优势更加明显。

AI 爬虫的优势总结

1. 更高的灵活性

传统爬虫依赖固定规则,面对网站结构变化往往束手无策。而 AI 爬虫能根据语义理解网页,自动适应结构调整,无需频繁修改规则,大大提高了爬虫的灵活性。

2. 更强的准确性

通过自然语言处理和语义分析,AI 爬虫能更精准地定位和提取所需信息,减少因网页结构复杂或不规范导致的数据提取错误,提高数据质量。

3. 降低开发成本

对于开发者来说,不需要花费大量时间和精力去编写和维护复杂的规则匹配逻辑。使用 AI 爬虫框架,如 x - crawl,结合强大的 AI 模型,能够快速实现高效的数据抓取功能,降低了开发成本和难度。

总结与展望

通过对 AI 爬虫的介绍、实际代码演示以及原理剖析,相信大家已经对 AI 爬虫有了更深入的了解。在 2025 年这个技术飞速发展的时代,AI 爬虫为我们的数据抓取工作带来了更高效、更智能的解决方案。

随着人工智能技术的不断进步,我们有理由相信 AI 爬虫在未来会发挥更大的作用。它可能会在更多领域得到应用,如更精准的市场调研、更全面的舆情监测、更智能的搜索引擎优化等。同时,也期待更多强大的 AI 爬虫框架和工具出现,进一步推动数据抓取技术的发展。不妨现在就尝试使用 AI 爬虫,体验它带来的全新数据抓取爽感吧!

相关推荐
泯泷1 小时前
探索DeepWiki:开发者的代码知识库利器
github·openai·ai编程
斯~内克2 小时前
深入解析Node.js洋葱模型:原理、优势与实战陷阱
node.js
2301_799404912 小时前
如何修改npm的全局安装路径?
前端·npm·node.js
(❁´◡双辞`❁)*✲゚*2 小时前
node入门和npm
前端·npm·node.js
tonydf2 小时前
0帧起手本地跑一下BitNet
后端·ai编程
蚂小蚁4 小时前
AI+云编程搞定Web3游戏开发:下一代游戏的新基建
web3·aigc·ai编程
Herbig5 小时前
服务器上安装node
linux·node.js
2501_915373886 小时前
Yarn 安装与使用教程
node.js
星际码仔8 小时前
解“码”良方:主流 AI 编程工具对比手册
ai编程·cursor·windsurf
BWrong8 小时前
MCP(Model Context Protocol)入门与实践
aigc·ai编程