AI爬虫:获取数据新助手

随着互联网的不断增长和信息量的爆炸式增加,有效地从网页中提取有用的数据变得越来越重要。传统的爬虫(Web Crawler)技术已经广泛应用于搜索引擎、市场研究、舆情监测等领域。然而,面对复杂的现代网站结构和丰富的多媒体内容,传统方法显得力不从心。这时,结合了人工智能(AI)算法的新型爬虫------AI爬虫应运而生。本文将探讨AI爬虫的工作原理、其与传统爬虫的区别以及未来的发展趋势。

一.准备环境

为了能够将AI运用进爬虫之中,我们先需要准备以下环境:

  • 安装node.js脚手架
  • 创建一个文件夹,并用 npm init -y 将文件夹初始化为后端项目。
  • 导入两个库: dotenvx-crawl

dotenv :是一个运用于Node.js的库,可以将 .env 文件中的APIkey、数据库连接字符串等敏感信息加载到 process.env 中,来保护这些信息,以防被修改或被他人获取。

x-crawl :是一个结合了传统爬虫技术和AI算法的Web数据采集框架,非常适合来爬取复杂多变的网站。此外,x-crawl 还为开发者提供了灵活的接口和丰富的特性,使它能够完成大规模应用开发的任务。

二.安装

我们可以通过手动修改 package.json 文件,在其中的 dependencies 字段添加所需要的库和版本号,在执行 npm i 来安装。

JavaScript 复制代码
{
  "name": "x-crawl",
  "version": "0.0.1",
  "main": "index.mjs",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": "",
  "dependencies": {
    "x-crawl": "^10.0.2",
    "dotenv":"^16.4.7"
 }
}

三.爬取数据

在这里,我们将爬取豆瓣的电影榜单。

1.导包
JavaScript 复制代码
import { 
    createCrawl,  // 返回爬虫实例
    createCrawlOpenAI // openai 配置项
  } from 'x-crawl';

创建 index.mjs 文件。在这里使用ES6是为了更好的导包和后期维护。

2.实例化爬虫应用
JavaScript 复制代码
  const cralwApp = createCrawl({
    maxRetry: 3,
    intervalTime: { max: 2000, min: 1000}
  })

通过 createCrawl 创建一个名为 crawlApp 的实例对象。并设置最大爬取次数和爬取间隔。

3.实例化OpenAI
php 复制代码
const crawlOpenAIApp = createCrawlOpenAI({
    clientOptions: {
      apiKey: 'sk-DQyFVvlYDkVEcwRy1uY6WOkEz0AUhGeQRdSQ0mXKA4JgCp8M',
      baseURL: 'https://api.302.ai/v1/'
    },
    defaultModel: {
      chatModel: 'gpt-4-turbo-preview'
    }
  })

同样的通过 createCrawlOpenAI 创建一个 crawlOpenAIApp 实例对象。

clientOptions 是创建客户端时传递的一组配置选项,来设置 APIkeybaseURL 等一些基础选项。

defaultModel 是设置初始模型,在这我们选择 chatModel 中的 gpt-4-turbo-preview 模型。

4.发送爬取请求
JavaScript 复制代码
 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
      ) 

通过调用 cralwApp 上的 crawlPage 方法,来打开豆瓣热门电影的网页并返回一个Promise,其中包含页面对象和其他信息。

.then 来处理由 crawlPage 返回的 Promise。当页面加载完成并且解析完Promise,就会执行回调函数中的代码。 async 关键字表示这个回调函数是异步的,允许我们使用 await 来等待其他 Promise 操作。

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

这定义了一个 CSS 选择器字符串 '.indent' ,用于定位页面上的特定元素。根据豆瓣电影排行榜页面的设计,.indent 可能是用来包裹电影列表内容的 HTML 元素。

使用 page.waitForSelector() 方法等待直到页面中出现与 targetSelector 匹配的元素。这确保了在继续下一步之前,页面已经完全加载并渲染了所需的元素。

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

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

调用 crawlOpenAIApp 对象的 parseElements 方法,解析爬取的内容(highlyHTML )并提取出所需要的结果,以JSON数组的形式返回。用 browser.close() 关闭浏览器。

小拓展

1.版本号

在一开始的 package.json 文件中出现了 version": "0.0.1 。这表示当前的爬虫框架是最初版本,还处于测试阶段。 现在最常用的版本号格式是 语义化版本控制(Semantic Versioning, SemVer) ,其基本形式为 MAJOR.MINOR.PATCH

  • 主版本号 (MAJOR) :当做了不兼容的 API 修改时增加。
  • 次版本号 (MINOR) :当以向后兼容的方式添加功能时增加。
  • 修订号 (PATCH) :当进行向后兼容的问题修复时增加。

例如:

  • 1.0.0 :表示第一个正式发布的稳定版本。性能完全、可以用于商业并对用户负责。
  • 1.1.0 :表示在当前版本下添加了一些新功能。
  • 2.0.0 :表示进行了重大更新,和之前的功能有许多不同,需要用户重新适应。
  • 2.0.1 :表示修复 2.0.0 中的一些BUG问题。
2.解构

在从 res.data 中提取出 pagebrowser 对象时运用了解构的方法。 解构是以一种更加简洁的方式从复杂变量中获取一些特定数据,使代码更加简洁和便于维护,提高代码的可读性。

JavaScript 复制代码
const person = {
  name: 'Alice',
  age: 25,
};

// 解构赋值
const { name, age } = person;

console.log(name);      // 输出: Alice
console.log(age);       // 输出: 25

这里是将 nameage 的值直接获取并输出。

3.剩余运算符

剩余运算符(...)用于收集多个元素到一个数组或对象中,和解构相结合可以进一步处理数组和对象。

css 复制代码
const [coach,...members] = ["米卢","李铁","孙继科","范志毅"]
// ...rest 运算符
console.log(coach,members)//输出 米卢 [ '李铁', '孙继科', '范志毅' ]

这里是将第一个米卢 作为教练独自归为一类,剩下的李铁孙继科范志毅则是作为球员归为一类。

总结

AI爬虫的出现代表了网络数据采集领域的前沿进展。随着技术的不断进步,我们预计未来的AI爬虫将变得更加智能、高效,同时遵守严格的法律和道德规范,确保数据的安全性和隐私保护。

相关推荐
数据龙傲天4 小时前
电商数据API接口:连接前端与后端的纽带
大数据·爬虫·python·数据分析·api
lovelin+v175030409666 小时前
电商数据API接口:安全与性能的双重挑战
人工智能·爬虫·python·数据分析
猿小猴子7 小时前
Python3 爬虫 Scrapy 与 Redis
redis·爬虫·scrapy
zi__you20 小时前
【Python网络爬虫笔记】10- os库存储爬取数据
笔记·爬虫·python
数据小爬虫@1 天前
利用Python爬虫技术获取商品销量详情
开发语言·爬虫·python
雨中奔跑的小孩1 天前
爬虫学习案例4
爬虫·学习
不会玩技术的技术girl1 天前
爬虫获取的数据如何有效存储和管理?
爬虫
纪佰伦2 天前
使用goquery和chromedp写爬虫
爬虫
数据龙傲天2 天前
API接口安全:电商数据保护的坚固防线
爬虫·python·数据分析·api