喜欢爬虫的伙伴都知道,在爬网站的内容的时候并不是一爬就可以了,有时候就会遇到一些网站的反爬虫,折回让你爬不到数据,给你返回一些404,403或者500的状态码,这有时候会让人苦不堪言,在你爬的数据较多时,网站认为你是一个机器,就不让你爬了。反爬虫主要有以下几种方式:
通过UA判断。这是最低级的判断,一般反爬虫不会用这个做唯一判断,因为反反爬虫非常容易,直接随机UA即可解决。
通过单IP频繁访问判断。这个判断简单,而且反反爬虫比较费力,反爬虫绝佳方案。需采用多IP抓取。
通过Cookie判断,例如通过会员制账号密码登陆,判断单账号短时间抓取次数判断。这个反反爬虫也很费力。需采用多账号抓取。
动态页面加载。这个考验前端工程师的功底,如果前端写的好,各种JS判断,各种逻辑,像百度,淘宝一样,post登录很难。较好的方法,但是对于大牛,还是防不胜防。反反爬虫多采用渲染浏览器抓取,效率低下。
采用验证码。这里要么是登录的时候有验证码,要么是判断是爬虫时,不封IP,而是采用验证码验证,例如链家网。验证码是反爬虫性价比较高的方案。反反爬虫一般接入OCR验证码识别平台或者人工打码平台,亦或者利用Tesseract OCR识别,亦或者采用神经网络训练识别验证码等。
代理IP是最常见的一种多IP爬虫方法。在请求Headers中加入代理IP地址,即可实现代理IP抓取。缺陷是爬取速度和代理IP的速度息息相关。而且好的IP费用较高,免费的速度普遍不高。
当使用熊猫代理ip时可按照以下动态代理接入文档进行操作
1.说明
使用动态代理:
1.动态并发产品和动态按量包时产品代理设置为 dynamic.xiongmaodaili.com:8089;动态按量产品需将代理设置为 dynamic.xiongmaodaili.com:8088
2.在请求的header里面添加Proxy-Authorization参数(下面有详细的说明)
3.访问https协议头需要先忽略证书验证
2.使用方法
签名算法参数:
secret 个人密钥
orderno 订单号
timestamp 时间戳/1000(也就是10位时间戳)
注:change参数不加入签名算法,不传默认为true(即使用每次访问都改变ip策略)
认证流程
2.1客户根据三个参数拼接出字符串
txt=“orderno=xxxx,secret=xxxxxxxxx,timestamp=xxxxxxxxxx”
2.2签名根据planText 拼接出的字符串 进行MD5() ,然后再转成大写 例如
sign = org.apache.commons.codec.digest.DigestUtils.md5Hex(txt).toUpperCase();
2.3客户通过head中添加Proxy-Authorization 例如
Proxy-Authorization:sign=38UDHCCXXXXX&orderno=DT2017230151xxxxxxx×tamp=1487753521&change=true
2.4 服务器接受到请求,认证成功则开始执行代理服务,失败则返回错误提示,用utf-8编码即可查看错误原因。