node实现的爬虫功能示例

yizhihongxing

下面我来为你详细讲解如何使用Node.js实现网页爬虫功能。

  1. 准备工作

在开始编写代码之前,我们需要先安装Node.js和一些相关的模块。具体步骤如下:

1.1 安装Node.js

请先在官网https://nodejs.org/zh-cn/下载Node.js的安装包,然后按照提示安装即可。

1.2 安装Request模块

我们使用Request模块来发起http请求获取页面内容。在CMD中执行以下命令即可:

npm install request

1.3 安装Cheerio模块

我们使用Cheerio模块来解析页面节点。在CMD中执行以下命令即可:

npm install cheerio
  1. 使用Request模块发起http请求获取页面内容

我们先来看一个简单的例子。下面的代码可以获取百度首页的html内容。

const request = require('request');

request('https://www.baidu.com', function (error, response, body) {
  if (!error && response.statusCode === 200) {
    console.log(body);
  }
});

其中,request函数用于发起http请求。第一个参数为请求的url;第二个参数为请求回调函数,它接收三个参数:error、response、body。其中,error表示请求过程中产生的错误;response包含了服务器返回的信息,比如状态码、头信息等;body表示服务器返回的html内容。

  1. 使用Cheerio模块解析页面节点

获取到页面的html内容之后,我们需要对其进行解析,这时候Cheerio模块就派上用场了。下面的代码可以获取百度首页的标题。

const request = require('request');
const cheerio = require('cheerio');

request('https://www.baidu.com', function (error, response, body) {
  if (!error && response.statusCode === 200) {
    const $ = cheerio.load(body);
    const title = $('title').text();
    console.log(title);
  }
});

其中,cheerio.load函数用于将页面内容转换成可操作的节点对象。接着,我们使用$('title')来获取页面标题节点,再使用text()方法获取其文本内容。

  1. 示例1:爬取Node.js中文网站的文章列表

下面,我们将这两个模块结合起来,实现一个简单的爬虫。我们的目标是爬取Node.js中文网站的文章列表。

文章列表的url为:https://www.nodejs.cn/learn。我们可以使用Request模块获取它的html内容,然后使用Cheerio模块解析出文章标题和链接。

const request = require('request');
const cheerio = require('cheerio');

request('https://www.nodejs.cn/learn', function (error, response, body) {
  if (!error && response.statusCode === 200) {
    const $ = cheerio.load(body);
    const articleList = [];
    $('.learn-content-item').each(function(i, e) {
      const title = $(e).find('.learn-content-title').text().trim();
      const url = $(e).find('.learn-content-item-cta>a').attr('href');
      articleList.push({
        title,
        url
      });
    });
    console.log(articleList);
  }
});

在上面的代码中,我们首先使用$('.learn-content-item')获取到所有文章节点,再对每个节点进行遍历,解析出标题和链接并加入到列表中。最终的输出结果如下:

[
  {
    "title": "Node.js 命令行接口开发工具包",
    "url": "/docs/command-line-api/"
  },
  {
    "title": "Node.js 输入输出",
    "url": "/docs/guides/blocking-vs-non-blocking/"
  },
  {
    "title": "Node.js 文件系统",
    "url": "/docs/guides/file-system/"
  },
  // more articles...
]
  1. 示例2:爬取掘金网站的文章列表

接下来,我们再来看一个稍微复杂一些的例子。我们的目标是爬取掘金网站(https://juejin.cn/)的文章列表。注意,由于掘金网站使用了反爬虫机制,所以我们需要使用请求头模拟真实浏览器发起请求。

const request = require('request');
const cheerio = require('cheerio');

const options = {
  url: 'https://api.juejin.cn/recommend_api/v1/article/recommend_all_feed',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Agent': 'Juejin/Web',
    'X-Legacy-Device-Id': '1624588307264',
    'X-Legacy-Token': ''
  },
  json: true,
  body: {
    id_type: 2,
    client_type: 2608,
    cursor: '0',
    limit: 20
  }
};

request(options, function (error, response, body) {
  if (!error && response.statusCode === 200) {
    const articleList = [];
    body.data.forEach((d) => {
      articleList.push({
        title: d.article_title,
        url: `https://juejin.cn/post/${d.article_id}`
      });
    });
    console.log(articleList);
  }
});

在上面的代码中,我们使用POST请求访问https://api.juejin.cn/recommend_api/v1/article/recommend_all_feed接口,获取到JSON格式的文章列表。其中,请求头中的X-Legacy-Token字段需要被替换为真实的token。

最终,我们使用forEach方法对每个文章节点解析出标题和链接,并将它们加入到articleList列表中。输出结果如下:

[
  {
    "title": "JavaScript操作剪贴板那些事",
    "url": "https://juejin.cn/post/6969704246673395759"
  },
  {
    "title": "浅拷贝、深拷贝及其实现",
    "url": "https://juejin.cn/post/6969542464278981640"
  },
  {
    "title": "写了一个 POC 实现窃取微信账号登录态的黑产服务",
    "url": "https://juejin.cn/post/6969401789501857822"
  },
  // more articles...
]

以上就是使用Node.js实现网页爬虫功能的完整攻略。就像其他编程技能一样,爬虫也需要遵守相关法律法规,不能用于非法用途。同时,也需要考虑到被爬取网站的反爬虫机制。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node实现的爬虫功能示例 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • node结合swig渲染摸板的方法

    下面是关于“node.js结合swig模板渲染的方法”的详细介绍: 1. 什么是swig模板引擎? Swig是一个强大的、快速的、细致的模板引擎,它的语法类似于jinja2和Django模板引擎。Swig最初是为Express框架构建的,它的可扩展性和集成能力也是很强的。 2. 在Node.js中安装并使用Swig模板引擎 在项目目录下,通过npm安装swi…

    node js 2023年6月8日
    00
  • NodeJS学习笔记之FS文件模块

    下面是关于“NodeJS学习笔记之FS文件模块”的完整攻略: 什么是FS模块? Node.js中的FS模块是用于处理文件系统的核心模块之一。它允许您读取、更新和删除文件,以及创建和读取文件夹。 如何使用FS模块? 在使用FS模块之前,必须先引入该模块。可以使用以下代码实现: const fs = require(‘fs’); 读取文件 你可以使用fs.rea…

    node js 2023年6月8日
    00
  • JS实现淘宝支付宝网站的控制台菜单效果

    实现淘宝、支付宝网站的控制台菜单效果,需要使用HTML、CSS和JavaScript来实现。 HTML部分 首先在HTML中创建一个模拟控制台界面的框架,其中包含一个侧边栏菜单和一个主界面区域,在侧边栏菜单中新建一个ul列表,用于放置菜单项: <div class="console"> <div class="…

    node js 2023年6月8日
    00
  • nodejs 搭建简易服务器的图文教程(推荐)

    下面是详细的“nodejs 搭建简易服务器的图文教程(推荐)”的攻略。 基本概念 Node.js是一个基于Chrome V8引擎的JavaScript运行时。它可以解析和执行JavaScript代码,并在服务器端运行,可以联系上下文环境并直接访问OS底层库的服务器环境。Node.js在后端开发领域发挥着越来越重要的作用,我们可以使用Node.js轻松地搭建一…

    node js 2023年6月8日
    00
  • Node.js五大应用性能技巧小结(必须收藏)

    Node.js五大应用性能技巧小结 Node.js 是一款非常流行的服务器端 JavaScript 运行环境,它的高效、快速、轻量级等特点使得它在 web 开发领域得到了越来越广泛的应用。为了让 Node.js 应用的性能得到优化,我们可以采用一些针对性的技巧。 1. 更好的代码结构 合理的代码结构通常是提高程序性能的第一步之一。通过使用观察者、装饰器、统一…

    node js 2023年6月8日
    00
  • 浅谈js promise看这篇足够了

    浅谈JS Promise 介绍 JS Promise是一种规范化的解决异步操作的方案,由于JS具有单线程、异步操作等特点,这使得JS Promise显得更加重要。在这篇文章中,我们将讨论JS Promise并提供示例。我们会通过以下步骤详细介绍JS Promise: Promise概念 Promise状态 Promise如何使用 Promise示例1 Pro…

    node js 2023年6月8日
    00
  • nodejs各种姿势断点调试的方法

    关于“Node.js各种姿势断点调试的方法”的攻略,我们可以从以下几个方面来讲解: 1. 在JavaScript中设置断点 在Node.js中,可以在JavaScript文件中设置断点来进行调试,这可以通过在代码中加入debugger语句来实现。 function sayHello(name) { debugger; return `Hello, ${nam…

    node js 2023年6月8日
    00
  • 详解Node.js包的工程目录与NPM包管理器的使用

    非常感谢您对Node.js包的工程目录和NPM包管理器的关注。下面我将为您详细介绍相关知识。 1. Node.js包的工程目录 Node.js包的工程目录包含以下文件和目录: . ├── bin/ │ └── your-cli.js ├── lib/ │ ├── your-library.js │ ├── submodule1.js │ ├── submod…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部