NodeJs 第八章 数据抓取(爬虫)

什么是爬虫

爬虫 又称为网络爬虫,是一种基于规则对网址中文本、图片等信息进行自动抓取的程序。爬虫通过模拟真实用户,向服务器发送请求,持续对网页数据进行抓取,直到达成某一条件时停止。

爬虫的本质是在海量的互联网信息中通过筛选收集有用的信息,最终进行分析整合以供使用。

爬虫工作原理

爬虫的工作原理表现为获取初始 URL、根据初始信息更新 URL、通过读取 URL 解读网页内容以及在遵循爬虫系统指令停止爬取几个过程。爬虫首先会爬取初始 URL 网页信息,随后进行解析,从中获取新的 URL 地址,存放到爬取的 URL 队里中,爬取到的网页会被存储到原始数据库中。爬虫过程就是不断重复在 URL 中获取网页信息和从网页信息中获取新的 URL 的过程。在编写爬虫时,要设置爬取停止规则,当爬虫系统满足设置的停止规则时,爬虫会停止爬取。如果不设置爬取条件,爬虫会工作到无法获取新的 URL 为止。

爬虫分类

  • 通用网络爬虫
    通用网络爬虫的爬行范围和数量较大,对爬取速度和存储空间的要求较高,主要用于门户网站搜索引擎和大型 Web 服务提供商采集数据。通用网络爬虫覆盖面较广,一般采用并行工作方式,其结构大致分为以下几个模块:页面爬行、页面分析、链接过滤、页面数据库、URL 队列以及初始 URL 集合。
  • 聚焦网络爬虫
    聚焦网路爬虫是指可以进行内容筛选的爬虫,相较通用网络爬虫增加了链接评价模块和内容评价模块,对爬取页面的内容和链接进行重要性评价,根据不同的重要性对 URL 访问顺序进行排序。聚焦网络爬虫指爬取与需求主题相关的页面,节省硬件和网络资源。
  • 增量式网络爬虫
    增量式网络爬虫是指只爬取新产生或发生变化的网页,只在需要时进行爬取,降低了爬虫的数据下载量,但爬行算法比较复杂。增量式网路爬虫的结构包含爬行模块、排序模块、更新模块、本地页面集、待爬行 URL 集以及本地页面 URL 集。
  • 深层网络爬虫
    深层网络爬虫通过表单填写进行内容爬取,主要用来爬取隐藏在搜索表单后,不能通过静态链接直接爬取的网页。深层网络爬虫包含爬行控制权、解析器、表单分析器、表单处理器、响应分析器、LVS 控制器六个基本模块和两个爬虫内部数据结构。

如何识别爬虫

识别爬虫的常见方法是检查 HTTP 协议头的 User-agent 字段,通过字段中含有的用户标识信息进行判断,确定发起访问请求的IP地址是否与声明一致。由于爬虫对 URL 访问量较大,HTTP 请求率高,对特定文件类型请求较多,对于一些无法识别的爬虫,可以基于请求速率、访问量、请求方法等进行算法识别。另外,识别恶意爬虫的常用策略是进行黑名单匹配,但爬虫会经常更换 IP 地址,需要精细地分析爬虫行为,判断爬虫的行为动机。

Node中如何实现爬虫

我们可以利用 axios 发送一个http 请求,然后利用 cheerio 解析

  • axios 客户端和服务器通用
  • cheerio Jquery的核心库,与dom无关
sql 复制代码
async function getHTML() {
  const resp = await axios.get("https://xxx.com");
  return resp.data;
}

async function getBookLinks() {
  const html = await getBooksHTML();
  const $ = cheerio.load(html);
  const body = $("body");
}
相关推荐
xiaoxiongip6662 小时前
HTTP 和 HTTPS
网络·爬虫·网络协议·tcp/ip·http·https·ip
兆。4 小时前
掌握 PyQt5:从零开始的桌面应用开发
开发语言·爬虫·python·qt
API快乐传递者10 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
兜里有糖请分享20 小时前
Python中序列化/反序列化JSON格式的数据
爬虫·python
亿牛云爬虫专家1 天前
用Puppeteer点击与数据爬取:实现动态网页交互
javascript·爬虫·爬虫代理·puppeteer·数据·代理ip·16yun
API快乐传递者1 天前
利用Python 的爬虫技术淘宝天猫销量和库存
开发语言·爬虫·python
操练起来1 天前
【Python实战案例】爬虫项目实例(附赠源码)
数据库·爬虫·python
编码小袁2 天前
利用爬虫爬取网站信息
爬虫
孤寒者2 天前
【实战篇】requests库 - 有道云翻译爬虫 【附:代理IP的使用】
爬虫·代理ip·隧道代理·有道云翻译爬虫·青果代理ip
=(^.^)=哈哈哈2 天前
从安全角度看多线程(附Golang举例)
爬虫·python·golang