在当今数据驱动的时代,网络爬虫成为了开发者获取数据的重要工具。本文将教你用Node.js快速搭建一个简单的网页爬虫,仅需3分钟即可掌握核心技术!

我们开始准备环境

1. 安装Node.js 版本至少要在14以上才行哦

2. 初始化开发项目的命令在这里👇

mkdir simple-crawler && cd simple-crawler
npm init -y

3. 在项目里边安装我们的依赖吧💪

npm install axios cheerio

环境准备好了以后,我们开始规划我们的核心代码📣

1. 引入我们要使用的依赖

const axios = require('axios');
const cheerio = require('cheerio');

2. 主要的网页请求代码,可能我们还有封装的,但是这里先这样吧😄

const { data } = await axios.get(你要爬取的网页地址);

3. 非常关键的步骤,要解析我们获取的网页内容了哦🥳

const $ = cheerio.load(html);

// 像jquery一样简单的选择器
$('.news-title').each((i, elem) => { });

我们来看看我们的完整代码

const axios = require('axios')
const cheerio = require('cheerio')
const fs = require('fs')
const path = require('path')

/**
 * 获取页面内容,为了更好的处理数据,可以使用Promise来编写一个方法
 */
function getHtml(url) {
    return new Promise(async (resolve, reject) => {
        try {
            const { data } = await axios.get(url, {
                headers: {
                    /** 知乎做了一个小动作,记得加上user-agent和cookie数据哦,不然你会被拒绝的 😁😁😁 */
                    'user-agent': 'Mozilla/5.0 ',
                    'cookie': 'q_c1=61c903d5'
                }
            })
            resolve(data)
        } catch {
            reject('error')
        }
    })
}

/**
 * 解析我们获取到的内容,可以指定我们的选择器
 */
function getData(html) {
    return new Promise(resolve => {
        const $ = cheerio.load(html)
        let resultList = []
        $('.HotList-list').find('.HotItem').each((i, el) => {
            resultList.push({
                index: i,
                title: $(el).find('.HotItem-title').eq(0).text(),
                desc: $(el).find('.HotItem-excerpt').eq(0).text(),
                hot: $(el).find('.HotItem-metrics').eq(0).text()
            })
        })
        resolve(resultList)
    })
}

async function main() {
    try {
        /** 我们以知乎热榜为例 */
        const TARGET_URL = 'https://www.zhihu.com/hot'
        let html = await getHtml(TARGET_URL)
        let result = await getData(html)

        /** 最后将我们的数据写入到json文件中,保存起来 */
        fs.writeFileSync(path.join(__dirname, 'result.json'), JSON.stringify(result), {encoding: 'utf-8'})
        console.log('抓取页面数据成功')
    } catch (error) {
        console.error('抓取失败:', error.message);
    }
}

main();

最后我们来看看原理是怎么样的呢🫣

1. HTTP请求 → 获取HTML文档

2. Cheerio解析 → 类jQuery选择器

3. 数据提取 → CSS选择器定位元素

4. 结果处理 → 存储/展示数据

最后我们做一个小小的总结吧

通过axios+cheerio的组合,我们仅用不到20行代码就实现了一个基础爬虫。虽然简单,但已包含网络请求、DOM解析、数据提取等爬虫核心要素。记得在实际使用时遵守相关法律法规和网站的使用条款,合理合法使用爬虫技术。

源码已上传Gitee(虚拟链接:simple-crawler-demo: 三分钟打造一个简单的Node.js爬虫

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐