4.1 目标站点初步分析
想抓取某个数据源,需要了解有哪些路径可以获取到数据源,基本上无外乎三种:
- PC端网站
- 针对移动设备响应式设计的网站
- 移动App
原则是能抓移动App的,最好抓移动App,如果有针对移动设备优化的网站,就抓针对移动设备优化的网站,最后考虑PC网站。因为移动App基本都是API很简单,而移动设备访问优化的网站一般来讲都是结构简单清晰的HTML,而PC网站自然是最复杂的了;针对PC端网站和移动网站的做法一样,分析思路可以一起讲,移动App单独分析。
另外,针对这三者的数据采集,首先要做的就是检查有没有接口。这是非常重要的。
1. 检查网站是否提供接口
API 是网站官方提供的数据接口,如果提供调用 API 进行数据采集,可以认为是在网站允许的范围内进行采集。这样,网站设置的障碍会相对较少,道德与法律风险也会较低。
2. 网站类型的分析
首先是网站类的,使用的工具就是Chrome,建议用Chrome的隐身模式。
具体操作步骤 输入网址后,先不要回车确认,右键选择审查元素,然后点击网络,记得要勾上preserve log选项,因为如果出现重定向跳转,之前的请求全部都会被清掉,影响分析,尤其是重定向时还加上了Cookie;
接下来观察网络请求列表,资源文件,例如css,图片基本都可以忽略,第一个请求肯定就是该链接的内容本身,所以查看源码,确认页面上需要抓取的内容是不是在HTML标签里面,很简单的方法,找到自己要找的内容,看到父节点,然后再看源代码里面该父节点里面有没有内容,如果有,直接抓该链接就可以了。如果没有,则很有可能是网站为了反爬虫,使用了 js 进行控制。
3. App的分析
我们以App类分析工具是 Fidder 为例,手机和电脑在一个局域网内,先用 Fidder 配置好端口,然后手机设置代理,ip为电脑的ip,端口为设置的端口,然后如果手机上请求网络内容时,Fidder 会显示相应地请求,那么就ok了,分析的大体逻辑基本一致,限制会相对少很多,但是也有几种情况需要注意:
- 加密,App 有时候也有一些加密的字段,这个时候,一般来讲都会进行反编译进行分析,找到对应的代码片段,逆推出加密方法;
- gzip 压缩或者 base64 编码,base64 编码的辨别度较高,有时候数据被 gzip 压缩了,不过 Charles 都是有自动解密的;
- https 证书,有的https请求会验证证书, Fidder 提供了证书,可以在官网找到,手机访问,然后信任添加就可以。
4. 分析网站的反爬措施
网站的反爬措施很多,各个站点的反爬手段也不尽相同,所以,还需要具体问题具体分析。针对反爬,我们在下文会有简单的介绍,这里我们针对异步请求进行分析。
分析异步请求 当我们查看网页源代码时,如果源代码的父节点之中没有内容就一定是异步请求,分析异步请求,按照网络列表,略过资源文件,然后点击各请求,观察是否在返回时包含想要的内容,有几个方法:
- 内容比较有特点,例如人的属性信息,物品的价格,或者微博列表等内容,直接观察可以判断是不是该异步请求;
- 知道异步加载的内容节点或者父节点的class或者id的名称,找到js代码,阅读代码得到异步请求;
- 确认异步请求之后,就是进行分析,简单的,直接请求异步请求,能得到数据;
有限制的异步请求 有时候异步请求会有限制,所以我们还要分析限制从何而来。针对分析对请求的限制,思路是逆序方法。
先找到最后一个得到内容的请求,然后观察headers,先看post数据或者url的某个参数是不是都是已知数据,或者有意义数据,如果发现不确定的先带上,只是更改某个关键字段,例如page,count看结果是不是会正常,如果不正常,比如多了个token,或者某个字段明显被加密,例如用户名密码,那么接下来就要看JS的代码,看到底是哪个函数进行了加密,一般会是原生JS代码加密,那么看到代码,直接加密就行。
如果是类似RSA加密,那么就要看公钥是从何而来,如果是请求得到的,那么就要往上分析请求,另外如果是发现请求headers里面有陌生字段,或者有Cookie也要往上看请求,Cookie在哪一步设置的。
接下来找到刚刚那个请求未知来源的信息,例如Cookie或者某个加密需要的公钥等等,看看上面某个请求是不是已经包含,依次类推。