爬虫是一种可以自动从网页上获取数据的程序,它可以帮助我们收集和分析各种有用的信息。在这篇文章中,我将向你展示如何用 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 等格式的数据、存储数据到数据库或文件等等。如果你想学习更多关于爬虫的知识,请继续关注我的博客!
往期数据:
2、微软新申请的专利:在虚拟空间内固定键盘位置,提升用户佩戴XR头显时的输入体验
3、华为计划于7月7日至7月9日在东莞召开年度开发者大会(cloud)
评论区