当前位置: 首页 > news >正文

使用Crawlee可破题js渲染采集数据

使用 Crawlee 实现自动化爬虫流程

在这里插入图片描述

1. Crawlee 简介

Crawlee 是一个强大的爬虫框架,用于快速构建和维护可靠的爬虫。它支持多种爬虫类型,包括基于 Cheerio 和 Playwright 的爬虫,能够高效处理静态和动态网页。

2. 项目目标

通过自动化脚本实现两个主要任务:

  1. 采集目标网站的所有链接。
  2. 从采集到的链接中提取页面数据。

3. 文件结构

项目包含以下文件:

  • collect_links.js:采集目标网站的所有链接并保存到 JSON 文件。
  • collect_data.js:从 JSON 文件读取链接并采集页面数据。
  • main.js:主控制脚本,协调两个文件的同步执行。
  • collected_links.json:存储采集到的链接。
  • collected_data.json:存储采集到的页面数据。

4. 安装依赖

在项目根目录下运行以下命令安装所需依赖:

npm install crawlee

5. 示例 1:采集链接

collect_links.js 脚本负责从目标网站采集所有链接,并将结果保存到 collected_links.json 文件中。

const { CheerioCrawler, Dataset } = require('crawlee');

const startUrls = ['https://example.com']; // 替换为目标网站的起始页面
const crawler = new CheerioCrawler({
    async requestHandler({ request, $ }) {
        const links = $('a').map((i, el) => $(el).attr('href')).get();
        const validLinks = links.filter((link) => link && link.startsWith('http'));
        await Dataset.pushData({ url: request.loadedUrl, links: validLinks });
        await crawler.addRequests(validLinks.map((link) => ({ url: link })));
    }
});

(async () => {
    await crawler.run(startUrls);
    await Dataset.exportData({ path: './collected_links.json', format: 'json' });
    console.log('所有链接已保存到 collected_links.json 文件中');
})();

6. 示例 2:采集数据

collect_data.js 脚本从 collected_links.json 文件中读取链接,并采集每个页面的标题和内容,最终将数据保存到 collected_data.json 文件中。

const fs = require('fs');
const { CheerioCrawler, Dataset } = require('crawlee');

(async () => {
    const links = JSON.parse(fs.readFileSync('./collected_links.json', 'utf-8'));
    const allLinks = links.flatMap((entry) => entry.links);

    const crawler = new CheerioCrawler({
        async requestHandler({ request, $ }) {
            const title = $('title').text();
            const content = $.html();
            await Dataset.pushData({ url: request.loadedUrl, title, content });
            console.log(`已采集页面:${request.loadedUrl}`);
        }
    });

    await crawler.addRequests(allLinks.map((url) => ({ url })));
    await crawler.run();
    await Dataset.exportData({ path: './collected_data.json', format: 'json' });
    console.log('采集完成,数据已保存到 collected_data.json 文件中');
})();

7. 主控制脚本:main.js

主控制脚本负责协调两个文件的同步执行,确保采集链接和采集数据的任务能够连续运行。

const { exec } = require('child_process');
const fs = require('fs');
const path = './collected_links.json';

// 运行采集链接的脚本
function runCollectLinks() {
    console.log('开始采集链接...');
    exec('node collect_links.js', (err, stdout, stderr) => {
        if (err) {
            console.error('采集链接时出错:', err);
            return;
        }
        console.log('采集链接完成:', stdout);
        console.log('开始采集数据...');
        runCollectData();
    });
}

// 运行采集数据的脚本
function runCollectData() {
    exec('node collect_data.js', (err, stdout, stderr) => {
        if (err) {
            console.error('采集数据时出错:', err);
            return;
        }
        console.log('采集数据完成:', stdout);
    });
}

// 启动整个流程
runCollectLinks();

8. 同步执行任务

通过 main.js 脚本,确保 collect_links.jscollect_data.js 按顺序同步执行。当 collect_links.js 完成后,自动触发 collect_data.js

9. 运行项目

在项目根目录下运行以下命令启动整个流程:

node main.js

10. 优点

  • 自动化流程:整个采集流程完全自动化,无需手动干预。
  • 解耦设计:采集链接和采集数据的逻辑完全分离,便于维护和扩展。
  • 实时响应:通过主控制脚本,确保在链接文件更新后立即启动数据采集。

11.文档地址

https://crawlee.dev

相关文章:

  • 【Javascript】js精度丢失
  • uni小程序wx.switchTab有时候跳转错误tab问题,解决办法
  • Redis除了做缓存还有哪些应用场景
  • 记一次高并发下导致的数据库死锁解决方案
  • Docker和K8S中pod、services、container的介绍和关系
  • 【3DMAX科研绘图】3DMAX一键生成极小曲面插件Gyroid使用方法
  • DeepSeek入门学习
  • 计算机网络基础简答题资料(对口高考)
  • 【C++】模板初阶
  • 力扣hot100——前k个高频元素 (优先队列法,相关总结文章见另一博客)
  • 大中型虚拟化园区网络设计
  • 重生之我在学校学习Linux创造系统命令
  • GitHub高效搜索工具
  • 优选算法的智慧之光:滑动窗口专题(一)
  • 材料分析方法和特点
  • 【汽车ECU电控数据管理篇】HEX文件格式解析篇章
  • 如何使用SaltStack批量替换SSL证书方案
  • Java 大视界 -- Java 大数据在智慧环保污染源监测与预警中的应用(104)
  • HTML 日常开发常用标签
  • TaskBuilder设置排序条件
  • 辽宁盘山县一乡镇幼儿园四名老师被指多次殴打一女童,均被行拘
  • 押井守在30年前创造的虚拟世界何以比当下更超前?
  • 美国明尼苏达州发生山火,过火面积超80平方公里
  • 夜读|尊重生命的棱角
  • 人民网评:守护健康证的“健康”,才有舌尖上的安全
  • 民生谣言误导认知,多方联动守护清朗——中国互联网联合辟谣平台2025年4月辟谣榜综述