本文主题-规避反爬虫 什么是反爬虫?参看 # 反爬虫(Anti-spider) #
今天穿插一个话题,教大家怎么规避反爬虫。一般来说我们会遇到网站反爬虫策略主要有下面几点:
附加说明:
针对IP: 爬虫解决办法是,降低爬虫的速度在每个请求前面加上 sleep() 或者不停的更换代理IP。
针对UA: 爬虫解决办法是,准备大量UserAgent随机调用。
针对IP: 爬虫解决办法是,降低爬虫的速度在每个请求前面加上 sleep() 或者不停的更换代理IP。
针对UA: 爬虫解决办法是,准备大量UserAgent随机调用。
我们今天就来针对1、2两点来写出反爬虫的下载模块,别害怕真的很简单。
使用模块
- requests(网络请求模块)
- re(正则表达式模块)
- random(随机选择模块)
实现思路
- 从代理IP发布网站中获取有效IP地址;
- 本地IP访问网页;当本地IP失效时,转换使用代理IP访问网页;
- 代理IP失败六次后转换下一个代理IP。
下面我们开整ヽ(●-`Д´-)ノ
第一步、先看看Python的默认UA
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
print r.text
运行结果:
{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.13.0"
},
"json": null,
"origin": "220.200.59.163",
"url": "http://httpbin.org/post"
}
我们可以看到,程序请求页面的UA是这样的: python-requests/2.13.0,而正常浏览器请求页面的UA应该是这样的:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0。
反爬虫程序若做上述检测,则当场被抓现形,直接枪毙。
所以呢,我们必须要伪造正常浏览器访问的UA,同时为了一次性解决 2.限制UA访问频率 ,我们还需要伪造大量的UA,请求时随机选取一个,混淆视听。
近期评论