Nodejs 爬虫 案例

1.安装:

javascript 复制代码
npm install cheerio
npm install axios

2.介绍:

2.1 cheerio 特点和用途描述:

  • HTML解析和操作:Cheerio 可以将 HTML 字符串加载到内存中,并将其转换为一个可操作的 DOM 树结构,从而可以方便地对 HTML 文档进行解析和操作。
  • 类似于 jQuery 的API:Cheerio 提供了类似于 jQuery 的选择器和操作方法,使用户可以使用 CSS 选择器、DOM 操作等方法来操纵 HTML 文档,例如查找元素、修改属性、添加样式等。
  • 轻量级:相比于浏览器端的 jQuery,Cheerio 是一个轻量级的库,适用于服务器端的 Node.js 环境,可以高效地进行 HTML 解析和操作,而无需运行整个浏览器引擎。
  • 方便的数据提取:通过 Cheerio,用户可以方便地从 HTML 文档中提取所需的数据,例如爬取网页内容、解析HTML 结构等,常用于网络爬虫、数据抓取等任务。
  • 模块化:Cheerio 可以与其他 Node.js 模块和工具结合使用,例如请求库(如 Axios、request)、文件系统操作等,从而实现更复杂的任务和功能。

2.2 使用axios进行网络请求
2.3 fs进行文件操作:将请求的数据,写入到指定的文件夹中

涉及到的知识点:

  • response.data.pipe(); 返回的是文件流的操作

  • fs.createWriteStream() 写入文件流的操作

3.示例:

javascript 复制代码
        const cheerio = require('cheerio');
        const axios = require('axios');
        const fs = require('fs');
        const path = require('path');

        const headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36'
        };

        const downloadImage = async (url, filePath) => {
            const response = await axios({
                url: url,
                method: 'GET',
                responseType: 'stream'
            });
            response.data.pipe(fs.createWriteStream(filePath));
            return new Promise((resolve, reject) => {
                response.data.on('end', () => {
                    resolve();
                });
                response.data.on('error', (err) => {
                    reject(err);
                });
            });
        };

        const crawler = async (options) => {
            for (let i = 1; i <= options.page; i++) {
                const url = i === 1 ? options.url : `${options.url}list_${i}.html`;
                console.log(url);

                try {
                    const response = await axios.get(url, {
                        headers: headers
                    });
                    const $ = cheerio.load(response.data);
                    const imageElements = $('.pics img');

                    imageElements.each((index, element) => {
                        const imageUrl = $(element).attr('src');
                        if (imageUrl) {
                            const imageName = `${i}-${index}.jpg`;
                            const imagePath = path.join(__dirname, 'img', imageName);

                            downloadImage(imageUrl, imagePath)
                                .then(() => {
                                    console.log(`${i} ---- ${index}`, imageUrl, 'Downloaded successfully.');
                                })
                                .catch((error) => {
                                    console.error(`${i} ---- ${index}`, imageUrl, 'Download failed. Error:', error);
                                });
                        }
                    });
                } catch (err) {
                    console.error('Error fetching or parsing the page:', err);
                }
            }
        };
        crawler({
            url: 'http://www.duoziwang.com/head/gexing/',
            page: 10
        });
相关推荐
0思必得08 小时前
[Web自动化] 处理爬虫异常
运维·爬虫·python·selenium·自动化·web自动化
喵手8 小时前
Python爬虫零基础入门【第九章:实战项目教学·第17节】内容指纹去重:URL 变体/重复正文的识别!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·内容指纹去重·url变体
喵手8 小时前
Python爬虫零基础入门【第五章:数据保存与入库·第1节】先学最通用:CSV/JSONL 保存(可复现、可分享)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·数据保存与入库·csv/jsonl
喵手11 小时前
Python爬虫零基础入门【第九章:实战项目教学·第10节】下载型资源采集:PDF/附件下载 + 去重校验!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·下载型资源采集·pdf下载
喵手11 小时前
Python爬虫零基础入门【第九章:实战项目教学·第13节】)动态站点“回到接口“:识别接口并用 Requests 重写(更稳)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·动态站点·识别接口并requests重写
一晌小贪欢15 小时前
Python 魔术方法实战:深度解析 Queue 模块的模块化设计与实现
开发语言·分布式·爬虫·python·python爬虫·爬虫分布式
qq_225891746618 小时前
基于Python+Django豆瓣图书数据可视化分析推荐系统 可视化 协同过滤算法 情感分析 爬虫
爬虫·python·算法·信息可视化·数据分析·django
小白学大数据19 小时前
链家二手房数据爬取、聚类分析与可视化展示实践
开发语言·爬虫·python
喵手19 小时前
Python爬虫零基础入门【第九章:实战项目教学·第11节】Playwright 入门实战:渲染后 HTML + 截图定位问题!
爬虫·python·爬虫实战·playwright·python爬虫工程化实战·零基础python爬虫教学·渲染html
深蓝电商API1 天前
Selenium 截图与元素高亮定位技巧
爬虫·python·selenium