什么是爬虫
爬虫 又称为网络爬虫,是一种基于规则对网址中文本、图片等信息进行自动抓取的程序。爬虫通过模拟真实用户,向服务器发送请求,持续对网页数据进行抓取,直到达成某一条件时停止。
爬虫的本质是在海量的互联网信息中通过筛选收集有用的信息,最终进行分析整合以供使用。
爬虫工作原理
爬虫的工作原理表现为获取初始 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");
}