使用 Node.js 开发资讯爬虫流程

建站知识 2025-04-16 11:20www.168986.cn长沙网站建设

在 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渲染整个页面的内容结束。这样我们就完成了从网页抓取数据到存储数据的过程。这个过程涉及到的技术细节和优化技巧非常丰富,需要不断学习和实践才能掌握。

上一篇:深入讲解AngularJS中的自定义指令的使用 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by