从0到1学nodejs爬虫小程序

什么是爬虫?

wiki是这么解释的:

是一种“自动化浏览网络”的程序,或者说是一种网络机器人。它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。

robots协议


robots.txt是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络爬虫),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。

Robots.txt协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。

说白了,这并不是一项需要强制遵守的规定,这只是一个君子之间的协议,防君子不防小人,但是不遵守这个协议可能导致不正当竞争,各位看官可以自行搜索下~

现简单列举下robots.txt中的一些配置规则,有个大致的印象,也有助于对爬虫逻辑的理解

  • 允许所有机器人:User-agent: *
  • 仅允许特定的机器人:User-agent: name_spider
  • 拦截所有机器人:Disallow: /
  • 禁止机器人访问特定的目录:Disallow: /images/

反爬虫(Anti-Spider)


一般网站从三个方面反爬虫:
* 用户请求的Headers
* 用户行为
* 网站目录和数据加载方式
* …

前两种比较容易遇到,大多数网站都从这些角度来反爬虫。第三种一些应用ajax的网站会采用,这样增大了爬取的难度。

通过Headers反爬虫

很多网站通过检测Headers的:
- User-Agent
- Referer

反反爬虫策略:在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。

基于用户行为反爬虫

  • 通过检测用户行为:
    • 同一IP短时间内多次访问同一页面
    • 同一账户短时间内多次进行相同操作

反反爬虫策略:1、专门写一个爬虫,爬取网上公开的代理ip,每请求几次更换一个ip;2、每次请求后随机间隔几秒再进行下一次请求

动态页面的反爬虫

上述的几种情况大多都是出现在静态页面,还有一部分网站,我们需要爬取的数据是通过ajax请求得到,或者通过JavaScript生成的

反反爬虫策略:找到ajax请求,也能分析出具体的参数和响应的具体含义,响应的json进行分析得到需要的数据。

需要预备的知识


  • Javascript 及 JQuery
  • 简单的nodejs基础
  • http 网络抓包 和 URL 基础
    对于前端工程师来讲真的是福利啊

需要安装的依赖库


  • superagent
  • cheerio
  • eventproxy
  • async

superagent


superagent 是个轻量的的 http 方面的库,是 nodejs 里一个非常方便的客户端请求代理模块,方便我们进行 get、post 等网络请求
[slide]

cheerio


可以理解成一个 Nodejs 版的 jQuery,用来从网页中以 css selector 获取数据,使用方式跟 jquery 一毛一样的。

eventproxy


eventproxy 模块是控制并发用的,它来帮你管理到底这些异步操作是否完成,有时我们需要同时发送 N 个 http 请求,然后利用得到的数据进行后期的处理工作, 请求完成之后,它会自动调用你提供的处理函数,并将抓取到的数据当参数传过来,方便处理。

async


async是一个流程控制工具包,提供了直接而强大的异步功能:mapLimit(arr, limit, iterator, callback)

还有强大的同步功能:
mapSeries(arr, iterator, callback)

爬虫实践

光说不练假把式,那么咱就开始吧~

先定义依赖库和全局变量~

// node自带的模块
const path = require('path')
const url = require('url');
const fs = require('fs')
// npm安装的依赖库
const superagent = require('superagent');
const cheerio = require('cheerio');
const eventproxy = require('eventproxy');
const async = require('async');
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Node.js 从零开始构建一个应用程序可以遵循以下步骤: 1. 安装 Node.js:访问 Node.js 官方网站 (https://nodejs.org/) 下载并安装适用于你操作系统的最新版本的 Node.js。 2. 创建一个新的项目文件夹:在你的项目文件夹中打开终端或命令提示符,并运行以下命令创建一个新的项目文件夹: ``` mkdir my-app cd my-app ``` 3. 初始化项目:在项目文件夹中运行以下命令,初始化一个新的 Node.js 项目,并按照提示完成项目配置: ``` npm init ``` 4. 创建入口文件:在项目文件夹中创建一个名为 `index.js` 的文件,这将是你的应用程序的入口点。 5. 编写代码:在 `index.js` 文件中使用 JavaScript 编写你的应用程序逻辑。你可以使用 Node.js 的内置模块和第三方模块来构建你的应用。 6. 安装依赖:如果你需要使用第三方模块,可以使用 npm 命令来安装它们。例如,要安装 Express 框架,可以运行以下命令: ``` npm install express ``` 这将在项目文件夹中创建一个名为 `node_modules` 的文件夹,并将 Express 框架安装到其中。 7. 运行应用程序:在终端或命令提示符中使用以下命令运行你的应用程序: ``` node index.js ``` 这将启动你的 Node.js 应用程序并开始监听指定的端口(如果有)。 这只是一个简单的从零开始使用 Node.js 的指南,还有很多其他方面可以习和探索,例如使用 Express 框架构建 Web 应用程序、使用数据库进行数据存储等等。希望这个回答对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值