目 录CONTENT

文章目录

简单易学!使用 Node.js 编写爬虫,跟着教程一步步实现!

萧瑟
2023-06-01 / 0 评论 / 0 点赞 / 247 阅读 / 3,211 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-07-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

node_crawler

爬虫是一种可以自动从网页上获取数据的程序,它可以帮助我们收集和分析各种有用的信息。在这篇文章中,我将向你展示如何用 node.js 来编写一个简单的爬虫,只需几步就可以实现。

1、安装 node.js 和 npm

node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它可以让我们在服务器端运行 JavaScript 代码。npm 是 node.js 的包管理器,它可以让我们方便地安装和管理各种 node.js 模块。

要安装 node.js 和 npm,你可以访问 https://nodejs.org/ 下载并安装最新版本的 node.js,它会自动包含 npm。你也可以使用其他方法来安装,具体可以参考 https://nodejs.org/en/download/package-manager/

安装完成后,你可以在命令行中输入以下命令来检查是否安装成功:

bash
node -v
npm -v

如果能看到相应的版本号,说明你已经成功安装了 node.js 和 npm。

image-1685513427887

2、创建项目文件夹和文件

接下来,我们需要创建一个项目文件夹来存放我们的爬虫代码。你可以在任意位置创建一个文件夹,比如在桌面上创建一个叫做 crawler 的文件夹。

在这个文件夹中创建一个叫做 index.js 的文件,这个文件就是我们的爬虫主程序。你可以使用任意的文本编辑器来编写这个文件,比如 VS Code、Sublime Text、Notepad++ 等。

然后在这个文件夹中运行npm init初始化项目,按照提示输入一些项目的相关信息(可以一路回车),项目就算是搭建好啦

image-1685513989892

3、安装 request 和 cheerio 模块

为了让我们的爬虫能够发送 HTTP 请求和解析 HTML 文档,我们需要使用两个非常有用的 node.js 模块:request 和 cheerio。

request 是一个简单的 HTTP 客户端,它可以让我们方便地发送各种 HTTP 请求,并获取响应数据。
cheerio 是一个轻量级的 jQuery 实现,它可以让我们方便地操作和提取 HTML 元素。

要安装这两个模块,我们需要在命令行中进入到我们的项目文件夹,并输入以下命令:

npm install request cheerio --save

这样,request 和 cheerio 模块就会被下载并保存到我们的项目文件夹中的 node_modules 文件夹里,并且会被记录到 package.json 文件中。

4、编写爬虫代码

现在,我们可以开始编写我们的爬虫代码了。首先,我们需要在 index.js 文件中引入 request 和 cheerio 模块:

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

然后,我们需要定义一个目标网址,也就是我们想要爬取数据的网页地址。比如,我们想要爬取百度百科上关于 node.js 的词条页面:

const url = 'https://news.baidu.com/';

接着,我们需要使用 request 模块来发送一个 GET 请求到这个网址,并获取响应数据。比如,我们想要提取出网页中的标题、摘要和正文内容,并打印出来:

request(url, function (error, response, body) {
  // 如果请求成功且状态码为 200
  if (!error && response.statusCode == 200) {
    // 使用 cheerio 加载 HTML 文档
    const $ = cheerio.load(body);

    // 存储获取到的数据
    const totalData = []
    
    // 获取hotnews下全部的li元素
    $('.hotnews').find('ul').find('li').each(function (index, value){
        // 向数组中存放数据
        totalData.push({
            title: $(value).find('strong').find('a').text(),
            href: $(value).find('strong').find('a').attr('href')
        })
    })

    // 打印结果
    console.log(totalData)
  }
});

我们需要拿取哪个类里面的内容,通过$符号就能拿到,页面DOM结构如下图

image-1685520280931

接下来我们将数据写入json文件

引入node提供的fs模块

const fs = require('fs')

手动创建data.json文件,并向其中存储数据

// 创建存储数据的函数,在打印totalData处调用该函数
function writeFs(totalData){
    fs.writeFile('./data.json', JSON.stringify(totalData), function (err, data) {
        if (err) {
            throw err
        }
        console.log('数据保存成功');
    })
}

image-1685520849622

运行这段代码,你会看到data.json中保存了新闻的标题和链接。这样,我们就成功地用 node.js 编写了一个简单的爬虫,并从网页上获取了数据。

完整代码

const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs')

const url = 'https://news.baidu.com/';

request(url, function (error, response, body) {
  // 如果请求成功且状态码为 200
  if (!error && response.statusCode == 200) {
    // 使用 cheerio 加载 HTML 文档
    const $ = cheerio.load(body);

    // 存储获取到的数据
    const totalData = []
    
    // 获取hotnews下全部的li元素
    $('.hotnews').find('ul').find('li').each(function (index, value){
        // 向数组中存放数据
        totalData.push({
            title: $(value).find('strong').find('a').text(),
            href: $(value).find('strong').find('a').attr('href')
        })
    })
    writeFs(totalData)
    // 打印结果
    console.log(totalData)
  }
});

function writeFs(totalData){
    fs.writeFile('./data.json', JSON.stringify(totalData), function (err, data) {
        if (err) {
            throw err
        }
        console.log('数据保存成功');
    })
}

当然,这只是一个非常基础的例子,实际上爬虫还有很多高级的技巧和功能,比如设置请求头、处理重定向、处理异常、设置代理、设置延时、模拟登录、处理验证码、解析 JSON、XML、CSV 等格式的数据、存储数据到数据库或文件等等。如果你想学习更多关于爬虫的知识,请继续关注我的博客!

往期数据

1、接口状态码全解析:你的API到底在说什么?

2、微软新申请的专利:在虚拟空间内固定键盘位置,提升用户佩戴XR头显时的输入体验

3、华为计划于7月7日至7月9日在东莞召开年度开发者大会(cloud)


weixin

0

评论区