爬虫是一种可以自动从网页上获取数据的程序,它可以帮助我们收集和分析各种有用的信息。在这篇文章中,我将向你展示如何用 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。

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

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

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

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

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结构如下图

接下来我们将数据写入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('数据保存成功');

})

}

运行这段代码,你会看到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、一文掌握JS数组中的reduce和reduceAll方法

3、JS数组方法大全:让你轻松掌握数组操作

文章就写到这里了,感谢你的阅读!我还在学习中,如有不对之处请多指正,如果你觉得文章有意义,能给你带来收获或启示,欢迎点赞收藏鼓励一下,也请关注我,我会分享更多有用的前端内容与技巧。我是 踏浪而行,希望与你共同成长~

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: