使用 Node.js 开发资讯爬虫流程
在 Node.js 的世界里,资讯爬虫的开发是一项重要的任务。本文将带你深入了解使用 Node.js 开发资讯爬虫的全过程,特别是如何下载目标网站的 HTML 并进行内容提取。
一、项目概述
近期,我们的项目需要收集特定资讯。由于项目基于 Node.js,因此选择用 Node.js 编写爬虫程序。目前,我们主要爬取了 Readhub、开源中国、开发者头条和36Kr等网站的资讯内容。尽管目前尚未处理多页面情况,但每天运行一次的爬虫已能满足当前需求,后期会进行进一步完善。
二、爬虫流程
简单来说,爬虫的工作流程就是将目标网站的 HTML 下载到本地,然后进行数据提取。
三、下载页面
在 Node.js 中,有很多 HTTP 请求库可供选择。在这里,我们使用的是 request 库。以下是下载页面的主要代码:
```javascript
requestDownloadHTML () {
const options = {
url: this.url,
headers: {
'User-Agent': this.randomUserAgent()
}
}
return new Promise((resolve, reject) => {
request(options, (err, response, body) => {
if (!err && response.statusCode === 200) {
return resolve(body)
} else {
return reject(err)
}
})
})
}
```
对于客户端渲染的页面,我们可以使用 Google 的 puppeteer 来下载。尽管在安装 puppeteer 时可能会因为需要下载 Chrome 内核而导致安装失败,但多试几次通常可以成功。以下是使用 puppeteer 下载页面的代码:
```javascript
puppeteerDownloadHTML () {
return new Promise(async (resolve, reject) => {
try {
const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
await page.goto(this.url)
const bodyHandle = await page.$('body')
const bodyHTML = await page.evaluate(body => bodynerHTML, bodyHandle)
return resolve(bodyHTML)
} catch (err) {
console.log(err)
return reject(err)
}
})
}
```
四、HTML内容提取
在获取 HTML 后,我们需要从中提取所需的信息。这时,我们可以使用 cheerio 这个神器。cheerio 提供了与 jQuery 类似的接口,使得 HTML 内容提取变得非常简单。你可以通过选择标签、属性或文本等方式提取所需的信息。通过这种方式,我们可以轻松地从 HTML 中获取我们需要的资讯内容。
使用 Node.js 开发资讯爬虫是一个既实用又有趣的过程。通过掌握这些技术,你可以轻松地从各种网站中获取你需要的资讯。网页深层:浏览器F12元素节点与爬虫技术的结合
=======================
当我们谈论爬虫技术时,我们不仅关注如何从网页上抓取数据,更关注如何高效、精准地获取所需信息。浏览器打开页面后,通过F12查看并提取页面元素节点,正是这一技术的重要一环。让我们深入理解这一过程并其背后的技术细节。
一、浏览器F12与元素节点提取
-
在浏览器中打开页面后,按下F12可以调出开发者工具,这里隐藏着网页的源代码和元素节点。通过审查元素,我们可以找到特定的页面元素,这些元素包含了我们需要的数据。使用JavaScript或jQuery等工具,我们可以轻松提取这些元素。以下是一个简单的例子:
```javascript
function readHubExtract() {
let nodeList = this.$('itemList').find('.enableVisited'); // 找到特定的页面元素节点
nodeList.each((i, e) => { // 遍历每个节点
let a = this.$(e).find('a'); // 获取链接和文本信息
this.extractData.push(this.extractDataFactory(a.attr('href'), a.text(), '', SOURCECODE.Readhub)); // 将数据推入数组
});
return this.extractData; // 返回提取的数据
}
```
二、定时任务:Cron Job的应用
在爬虫技术中,定时任务是非常重要的一环。我们可以使用Cron Job来定时执行爬虫任务,每天自动抓取更新的内容。以下是一个简单的例子:
```javascript
function job() {
let cronJob = new cron.CronJob({ // 创建定时任务对象
cronTime: cronConfig.cronTime, // 设置定时任务的时间规则
onTick: () => { spider() }, // 定时任务触发时执行的函数
start: false // 是否立即启动定时任务
});
cronJob.start(); // 启动定时任务
}
```
三、数据持久化:Mongoose的使用与操作优化
-
当我们从网页上抓取数据后,如何保存这些数据成了一个关键问题。这里我们可以使用Mongoose这个Node.js对象模型库来实现数据的持久化存储。以下是一个简单的例子:
我们创建一个新闻模型:
```javascript
import mongoose from 'mongoose'; // 引入mongoose模块
const Schema = mongoose.Schema; // 创建模型的模式结构对象
const NewsSchema = new Schema({ / 定义模型结构 / }); // 定义新闻模型的结构属性及类型等。最后导出这个模型。这个模型可以在其他文件中通过导入使用,并进行数据库操作。以下是基本操作类的定义: 导入基础服务类BaseService以及News模型,继承并扩展BaseService类创建NewsService类来处理新闻的增删改查操作。然后我们就可以愉快地使用这个服务类来保存数据了。例如:await newsService.batchSave(newsListTem)。更多细节可以在Github的项目中找到。通过克隆项目到本地进行查看和学习,可以更好地理解这个流程的实现细节和优化技巧。最后使用Cambrian渲染整个页面的内容结束。这样我们就完成了从网页抓取数据到存储数据的过程。这个过程涉及到的技术细节和优化技巧非常丰富,需要不断学习和实践才能掌握。
长沙网站设计
- 使用 Node.js 开发资讯爬虫流程
- 深入讲解AngularJS中的自定义指令的使用
- JS中的算法与数据结构之栈(Stack)实例详解
- PHP实现的获取文件mimes类型工具类示例
- 浅析PHP中Session可能会引起并发问题
- SqlServer 表连接教程(问题解析)
- javascript实现下雨效果
- 利用Vue实现一个markdown编辑器实例代码
- Angularjs实现控制器之间通信方式实例总结
- js事件驱动机制 浏览器兼容处理方法
- jQuery EasyUI常用数据验证汇总
- .NET实现在网页中预览Office文件的3个方法
- jQuery插件AjaxFileUpload实现ajax文件上传
- ASP.NET实现学生管理系统
- jquery实现全选、反选、获得所有选中的checkbox
- 详解ES6语法之可迭代协议和迭代器协议