什么?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 爬虫,体验它带来的全新数据抓取爽感吧!

相关推荐
一只爱撸猫的程序猿12 分钟前
使用Spring AI配合MCP(Model Context Protocol)构建一个"智能代码审查助手"
spring boot·aigc·ai编程
Jimmy1 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
TLuoQiu4 小时前
小电视视频内容获取GUI工具
爬虫·python
星际码仔5 小时前
停止无脑“Vibe”!一行命令,让你的Claude变身编程导师、结对伙伴
ai编程·claude
程序员老刘7 小时前
Flutter 3.35 更新要点解析
flutter·ai编程·客户端
爱加班的猫8 小时前
Node.js 中 require 函数的原理深度解析
前端·node.js
mortimer9 小时前
一次与“顽固”外部程序的艰难交锋:subprocess 调用exe踩坑实录
windows·python·ai编程
麦麦大数据13 小时前
F004 新闻可视化系统爬虫更新数据+ flask + mysql架构
爬虫·mysql·flask·可视化·新闻
python-行者13 小时前
akamai鼠标轨迹
爬虫·python·计算机外设·akamai
冲!!14 小时前
使用nvm查看/安装node版本
前端·node.js·node·nvm