概括性的介绍:
网络爬虫,总结起来,就是高效地收集互联网上的指定信息。
然而,不同的网站会有不同的保护措施,以及,不同的展示信息的方式。
这篇文章是第一篇,说的不多,是为了之后发文介绍如何开发一个自动化破解网站验证机制的程序(自动化生成爬虫代码文件)做铺垫。
爬虫的开发
主要就是针对三个点进行代码编写:
- 如何高效地发送可以拿到目标数据的请求
- 如何模仿真人操作可以堂而皇之地通过对方的验证机制获得数据
- 如何只截取目标信息而不要其他信息
开发的难度
高效发送请求
实现这个功能,还需要根据业务的具体需求和数据量级来决定。
如果业务多,量级大而且方便管理的,不用说,肯定是需要做分布式的。
如果是需要管理的业务不多的情况下,可以直接写独立的异步爬虫程序。
分布式爬虫 市面上的设计方案有很多,只要是对各自的需求指定的分布式方案,对于这个的实现,可以考虑爬虫平台。
独立的爬虫 也就是一个业务对应一个爬虫程序。
破解请求
前提:找到目标数据在哪一个url中,然后以这个url的http数据包作为目标开始破解(这一点也可以归为高效发送请求)
破解的核心就是如何构造一个身份,通过对方的验证,只要通过,对方就会返回有效数据
这个环节大体可以分为三个步(循环反复):
- 用这些 header cookie 以及 必要参数 发送请求
- 观察响应中是否存在我们想要的数据
- 去除 header cookie 以及 必要参数 中的部分键值对
这个步骤其实就是对键值对做组合。
到了这,对于一些没有太多防范措施对网站就能拿到数据了,然后现在越来越多的网站有了更复杂的验证机制(需要连续请求或者加密算法)。
比如:
- 链接对应一个唯一的 token,这需要分析从什么地方获得token(或者是其他相同功能的参数/键值对)。
- 参数(身份)激活,需要对另一个url发送请求后才能通过目标url请求对验证。
- 验证码
- js加密:内容加密/参数加密
等等
。。。。。。
并不是只有这些验证机制,反爬手段千千万,千奇百怪的验证机制就是爬虫工程师花费精力最多的地方。
截取数据(清洗规则)
当完成破解了之后,发送请求就可以得到网站的响应信息,然而,我们需要的信息只需要一部分,如果把不必要的信息入库就是资源浪费。因此,对响应内容做清洗就是十分必要的了。
响应内容的数据类型就是字符串(图片视频文件的二进制流对于爬虫业务来说很少,但也可以通过爬虫去下载)
一般来说,有目标数据的响应内容只有有两种类型:html 和 json
清洗的方式有三种:
- xpath
- json转hashmap,根据 key 找 value
- 通过正则表达式切出来
截取数据完成后,就是入库了
这些清洗规则,也都是通过人为定义