AIGC爬虫实战(一)

前言

传统的网络爬虫系统效率较低且难以应对复杂多变的网页环境

基于AIGC技术的智能化爬虫,则可以大幅提升爬虫的自主性和适应性,从而更高效地完成网络数据的采集和分析任务

本文将通过一系列实战案例,深入探讨AIGC技术在网络爬虫开发中的具体应用

代码实现

首先安装一下request-promise和cheerio

js 复制代码
npm install request-promise

npm install cheerio
  1. request-promise:

    • request-promise 是一个基于 request 库的 Promise 封装库。它使得发出 HTTP 请求变得更加简单和优雅。

    • 与原生的 fetch API 相比,request-promise 提供了更丰富的功能,如支持 cookie、代理设置、自定义报头等。

    • 使用 request-promise 可以轻松地进行异步 HTTP 请求,并通过 Promise 链处理结果,大大简化了回调嵌套的问题。

    • 示例代码:

      javascript 复制代码
      const rp = require('request-promise');
      
      rp('https://www.example.com')
        .then((htmlString) => {
          console.log(htmlString);
        })
        .catch((err) => {
          console.error(err);
        });
  2. cheerio:

    • cheerio 是一个用于解析和处理 HTML 的 jQuery 核心功能的实现。

    • 它提供了一套类似于浏览器中 jQuery 的 API,让开发者可以使用熟悉的选择器语法来遍历、搜索和操作 HTML 文档。

    • 与 JSDOM 等完整的 DOM 解析器相比,cheerio 更加轻量级和高效,适合在服务器端进行 HTML 解析和数据提取。

    • 示例代码:

      javascript 复制代码
      const cheerio = require('cheerio');
      
      const $ = cheerio.load('<h2 class="title">Hello, cheerio</h2>');
      
      $('h2.title').text('Hello, world.');
      $('h2').addClass('welcome');
      
      console.log($.html());
      // Output: <h2 class="title welcome">Hello, world.</h2>

接下来我们开始书写我们的代码

  1. 引入所需的Node.js模块:

    • request-promise: 用于发送HTTP请求并获取页面内容
    • cheerio: 用于解析HTML页面,提取所需的数据
    • fs: 用于写入JSON文件
  2. 定义基础URL:

    • basicUrl = 'https://movie.douban.com/top250'
  3. 定义getMovieInfo函数:

    • 该函数接受一个HTML节点作为参数
    • 使用cheerio解析节点,提取电影的标题、信息和评分
    • 将提取的数据封装成一个对象并返回
  4. 定义getPage函数:

    • 该函数接受一个URL和页码作为参数
    • 使用request-promise发送HTTP请求获取页面内容
    • 使用cheerio解析页面,提取每部电影的信息
    • 将提取的数据封装成一个数组并返回
  5. 定义main函数:

    • 该函数为程序入口点
    • 设置需要爬取的页数为25页(250部电影)
    • 使用for循环遍历每页,调用getPage函数获取数据
    • 将所有页面的数据合并成一个列表
    • 使用fs.writeFile将列表写入到output.json文件中
js 复制代码
let request = require('request-promise') // 需要安装
let cheerio = require('cheerio') // 需要安装
let fs = require('fs')
let basicUrl = 'https://movie.douban.com/top250'

function getMovieInfo(node) {
    let $ = cheerio.load(node)
    let titles = $('.info .hd span')
    titles = ([]).map.call(titles, t => {
        return $(t).text()
    })
    let bd = $('.info .bd')
    let info = bd.find('p').text()
    let score = bd.find('.star .rating_num').text()
    return { titles, info, score }
}
async function getPage(url, num) {
    let html = await request({
        url
    })
    console.log('连接成功!', `正在爬取第${num + 1}页数据`)
    let $ = cheerio.load(html)
    let movieNodes = $('#content .article .grid_view').find('.item')
    let movieList = ([]).map.call(movieNodes, node => {
        return getMovieInfo(node)
    })
    return movieList
}
async function main() {
    let count = 25
    let list = []
    for (let i = 0; i < count; i++) {
        let url = basicUrl + `?start=${25 * i}`
        list.push(... await getPage(url, i))
    }
    console.log(list.length)
    fs.writeFile('./output.json', JSON.stringify(list), 'utf-8', () => {
        console.log('生成json文件成功!')
    })
}
main()

可以看到我们爬取的数据都在json文件中

可以看到我们的数据格式还是有点问题的

接下来我们将第一个数据将它交给AI处理一下

可以看到AI给我们处理的不错,所以AI能够有效的提高我们爬取处理数据的效率

下篇文章我们将讲解一下如何在项目中调用AI的API去快捷处理数据

总结

本文将通过实战案例,深入探讨AIGC技术在网络爬虫开发中的具体应用

基于AIGC技术的智能化爬虫,则可以大幅提升爬虫的自主性和适应性,从而更高效地完成网络数据的采集和分析任务,AI在项目中的大力使用能够有效得提升项目的能力

相关推荐
LZXCyrus10 分钟前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
醉の虾14 分钟前
Vue3 使用v-for 渲染列表数据后更新
前端·javascript·vue.js
张小小大智慧23 分钟前
TypeScript 的发展与基本语法
前端·javascript·typescript
我感觉。28 分钟前
【机器学习chp4】特征工程
人工智能·机器学习·主成分分析·特征工程
hummhumm32 分钟前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
YRr YRr36 分钟前
深度学习神经网络中的优化器的使用
人工智能·深度学习·神经网络
DieYoung_Alive36 分钟前
一篇文章了解机器学习(下)
人工智能·机器学习
夏沫的梦38 分钟前
生成式AI对产业的影响与冲击
人工智能·aigc
asleep7011 小时前
第8章利用CSS制作导航菜单
前端·css
hummhumm1 小时前
第 28 章 - Go语言 Web 开发入门
java·开发语言·前端·python·sql·golang·前端框架