轻松玩转AI爬虫:豆瓣电影榜单一键抓取

281 阅读4分钟

引言

嘿,各位新手小伙伴们!今天我要带你们进入一个神奇的世界——AI爬虫。是不是听起来就很酷炫?没错,它确实很酷炫,而且现在我们就要一步步地创建一个能自动从豆瓣网站上抓取电影信息的爬虫应用。别担心,我会用最通俗易懂的语言,带着你一步一步完成这个项目。准备好了吗?让我们开始吧!

第一步:搭建环境,准备好我们的“武器库”

在开始之前,我们需要确保计算机上有Node.js环境,因为我们将使用JavaScript来编写爬虫代码。如果你还没有安装Node.js,那么先去官方网站下载并安装适合你操作系统的版本。

安装好Node.js后,打开命令行工具(Windows用户是CMD或PowerShell,Mac和Linux用户是终端),创建一个新的文件夹作为你的项目目录,并进入该文件夹。接下来,初始化一个新的Node.js项目:

mkdir ai-spider-tutorial
cd ai-spider-tutorial
npm init -y

npm init -y这条命令会快速为你生成一个默认的package.json文件,它是项目的配置文件,用来管理依赖和其他元数据。

第二步:安装依赖,“武装”我们的爬虫

现在我们已经有了一个干净的工作空间,是时候给我们的爬虫添加一些“肌肉”了。我们需要两个主要的模块:x-crawl用于网页抓取,dotenv用于加载环境变量。运行以下命令安装它们:

npm install x-crawl dotenv

这将会把这两个模块添加到你的dependencies中,并且会在package.json文件里记录下来。

第三步:导入模块,赋予爬虫“智慧”

现在我们的项目已经拥有了必要的“硬件”,但还需要软件支持。打开文本编辑器,在项目根目录下创建一个名为app.mjs的文件。然后,按照下面的方式引入刚刚安装的模块:

import {
  createCrawl,  // 爬虫实例化方法
  createCrawlOpenAI // OpenAI配置项
} from 'x-crawl';
import dotenv from 'dotenv';
dotenv.config(); // 加载环境变量

这里我们不仅引入了爬虫所需的函数,还通过dotenv加载了环境变量。这意味着我们可以安全地存储敏感信息,比如API密钥,而不会暴露在外。

这里有一个ES6的小知识点(解构):

对象解构
const obj = { name: "guo", age: 20, hobbies: ["交友", "喝酒", "下棋"] };
const { name, age } = obj;
console.log(name, age); // 输出:guo 20
  • 解释:从 obj 中直接提取 nameage 属性,并将它们赋值给同名变量。这样可以简化访问对象属性的过程。
数组赋值(非解构)
const hobbies = obj.hobbies;
console.log(hobbies); // 输出:["交友", "喝酒", "下棋"]
  • 解释:直接引用 objhobbies 属性,赋值给 hobbies 变量。这不是解构,但达到了类似的效果。
数组扩展运算符
const a = [1, 2, 3, 4, 5];
const b = [7, 8, 9];
const c = [...a, ...b];
console.log(c); // 输出:[1, 2, 3, 4, 5, 7, 8, 9]
  • 解释:使用扩展运算符 ... 将两个数组 ab 合并成一个新的数组 c。这种方式非常方便用于合并数组或复制数组。

讲解结束,接下来我们可以继续完成我们项目了

第四步:实例化爬虫,让它“活”起来

下一步就是让我们的爬虫真正动起来。继续在app.mjs中添加如下代码:

// 实例化爬虫应用
const crawlApp = createCrawl({
  maxRetry: 3, // 最大重试次数
  intervalTime: { max: 2000, min: 1000 } // 请求间隔时间
})

// 配置OpenAI爬虫应用
const crawlOpenAIApp = createCrawlOpenAI({
  clientOptions: {
    apiKey: process.env.OPENAI_API_KEY, // 从环境变量中获取API密钥
    baseURL: process.env.OPENAI_BASE_URL // OpenAI API的基础URL
  },
  defaultModel: {
    chatModel: 'gpt-4-turbo-preview' // 使用的模型
  }
})

这段代码设置了爬虫的基本行为模式,并为与OpenAI交互做准备。

第五步:执行爬取任务,见证奇迹的时刻

最后,我们要告诉爬虫去哪里找信息以及如何处理这些信息。将以下代码加入app.mjs

cralwApp.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 // 获取目标元素的HTML内容
    )
    
    // 使用OpenAI解析HTML并提取所需信息
    const result = await crawlOpenAIApp.parseElements(
      highlyHTML,
      `获取图片链接、电影名称、电影评分、电影简介\n输出格式为json数组`
    )

    console.log(result) // 打印结果
    browser.close(); // 关闭浏览器实例
  })

现在,当你运行node app.mjs时,我们的AI爬虫就会访问豆瓣电影榜单页面,找到所有推荐电影的信息,并打印出一个JSON格式的结果列表。怎么样,是不是很简单?

最后给大家看一下我们爬取到的数据吧!

image.png


这就是创建一个AI爬虫的所有步骤啦!希望这篇文章能够帮助你了解AI爬虫的基本原理和实现方法。当然,这只是冰山一角,AI爬虫的世界还有很多值得探索的地方。保持好奇心,不断学习,你会发现自己可以做很多有趣的事情。加油,未来的爬虫大师!

20200229174423_bzukt.jpg