在本实例中,我们将探讨如何使用Node.js来实现一个简单的网页爬虫,通过解析HTML内容来抓取Boos直聘网站上的职位数据。这个过程分为几个关键步骤:
确保你的开发环境中已经安装了Node.js。如果你还没有安装,可以从官方网站(https://nodejs.org)下载并按照指引进行安装。
接下来,你需要在你的项目文件夹中安装两个必要的依赖包:`superagent` 和 `cheerio`。这两个库分别用于发送HTTP请求和解析HTML内容。在命令行中输入以下命令进行安装:
```bash
npm install superagent --save-dev
npm install cheerio --save-dev
```
`superagent` 是一个轻量级的HTTP客户端库,提供了一种类似jQuery的API来处理HTTP请求,适合在Node.js环境中使用。而`cheerio` 则是Node.js中的一个HTML解析器,它实现了类似于jQuery的核心功能,使我们可以方便地查询和操作HTML文档。
在你的项目中创建一个新的JavaScript文件,例如 `crawler.js`,然后导入所需的依赖包:
```javascript
const http = require("http");
const path = require("path");
const url = require("url");
const fs = require("fs");
const superagent = require("superagent");
const cheerio = require("cheerio");
```
现在,我们可以编写爬虫代码来获取Boos直聘网站上的职位数据。这里我们抓取的是北京地区的前端职位:
```javascript
superagent
.get("https://www.zhipin.com/job_detail/?city=100010000&source=10&query=%E5%89%8D%E7%AB%AF")
.end((error, response) => {
if (error) {
console.error("请求错误:", error);
return;
}
const content = response.text;
const $ = cheerio.load(content);
const result = [];
// 遍历HTML中符合条件的li元素
$(".job-list li .job-primary").each((index, value) => {
// 提取各字段数据
const address = $(value)
.find(".info-primary")
.children()
.eq(1)
.html();
const type = $(value).find(".info-company p").html();
// 对字符串进行解码和截取处理
let decodedAddress = unescape(address.replace(/&/g, '%u').replace(/;/g, ''));
let decodedType = unescape(type.replace(/&/g, '%u').replace(/;/g, ''));
const addressArr = decodedAddress.split('<em class="vline"></em>');
const typeArr = decodedType.split('<em class="vline"></em>');
// 创建一个包含职位信息的对象,并将其添加到结果数组中
result.push({
title: $(value).find(".name .job-title").text(),
money: $(value).find(".name .red").text(),
address: addressArr,
company: $(value).find(".info-company a").text(),
type: typeArr,
position: $(value).find(".info-publis .name").text(),
txImg: $(value).find(".info-publis img").attr("src"),
time: $(value).find(".info-publis p").text(),
});
});
// 打印或处理结果数组
console.log(result);
});
```
在这个示例中,我们使用`superagent.get()`发送GET请求到指定URL,获取HTML响应。然后,利用`cheerio.load()`加载HTML内容并创建一个 `$` 对象,可以使用jQuery-like的语法进行DOM查询。我们遍历了`.job-list li .job-primary`选择器所匹配的所有元素,提取出职位的各个属性,如标题、薪资、公司名称、职位类型等,并将这些信息存储在一个名为`result`的数组中。
你可以根据需求对`result`数组进行进一步处理,比如写入文件、存储到数据库或者进行其他分析。
需要注意的是,网页结构可能会随时间改变,因此在实际使用时,确保定期检查网页DOM结构,以适应可能的变化。此外,频繁或大规模的爬虫行为可能违反网站的使用政策,务必确保你的爬虫行为符合网站规定,避免引起不必要的法律问题。