python反爬虫手册

User-Agent识别

修改请求头信息里的User-Agent

请求头信息识别

比如说referer, content-type,请求方法(POST, GET)

构造相应的请求头信息。比如说referer,我们在提取URL的时候,要把URL所在页面的URL也存储起来,并放到request.headers。

异步加载

我们需要分析页面的网络请求,从中找出和我们想要的数据相关的请求,并分析它的请求头信息、参数、cookie,然后根据这些信息构造我们的请求。通常来说都是ajax请求,也有图片请求,比如图片的lazy load,通过js在页面加载后修改图片的src属性。一般都会有其他的自定义属性存在,比如说"_src"。总之,可以找到一些ID或者链接。注意观察相关dom节点树上的特殊属性。

请求参数加密

一般是在前端通过一定的计算,构造出一个哈希值。需要分析前端的代码,找出具体计算的代码逻辑,并用python再实现。如果前端的代码经过混淆,并且代码量十分巨大,可以使用selenium或者splash等引擎去请求。但是,如果爬取的数据需求量比较大,我们还是要通过直接调用对方接口的形式去获取数据。

请求结果加密

1. json数据里面加密

比如携程酒店房型列表接口,用它自己的js解密,或者分析它的js前端逻辑,用python代码实现出来。

2. CSS加密

比如大众点评,通过CSS样式去代替某个字符。我们需要同时爬取CSS文件,并且分析CSS文件内的样式,最后定位到svg文件,并分析提取svg内的内容,完成替换。

3. 字体加密

比如猫眼电影。每次随机返回一个字体文件,并且字符也是随机的。需要每次下载对应的字体文件,并解析字体文件和字符之间的对应关系。

Cookie限制

登录、session限制,比如新片场,拿到登录以后的cookie,然后set到头信息里面,这样请求的时候就相当于登录了。

IP频率限制

需要准备大量的IP代理,获得IP代理的方式有:

  1. 自己搭建代理服务器(tinyproxy, squid+动态拨号,DDNS)
  2. 付费购买
  3. 爬取公开网络上代理(可用性比较低)

控制爬取频率,保持不被封的情况下的最合适的并发数量。

验证码:

  1. 尝试可否绕过前端验证,直接请求具体的接口,以绕开验证码.
  2. 可以用图片识别库去识别某些比较简单的验证码
  3. 接入云打码平台
  4. 用机器学习训练验证码的图片库,然后识别

n

你可能感兴趣的:(python反爬虫手册)