我们都知道在采集数据过程中,尤其是爬取大量数据的时候,很多网站都有反爬虫措施,封
ip是很严重的,,让你在采集的时候很心烦。本文就如何解决这个问题总结出一些应对措施,这些措施可以单独使用,也可以同时使用,效果更好。
一
、伪造
User-Agent
在请求头中把
User-Agent
设置成浏览器中的
User-Agent
,来伪造浏览器访问。比如:
headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}
resp = requests.get(url,headers = headers)
在每次重复爬取之间设置一个随机时间间隔
#
比如:
time.sleep(random.randint(0,3)) #
暂停
0~3
秒的整数秒,时间区间:
[0,3]
#
或:
time.sleep(random.random()) #
暂停
0~1
秒,时间区间:
[0,1)
而且最主要的是
ua
要越多越好,不要固定的使用那几个,要经常更换最新真实的
ua
。
二、
伪造
cookies
若从浏览器中可以正常访问一个页面,则可以将浏览器中的
cookies
复制过来使用,比如:
cookies = dict(uuid='b18f0e70-8705-470d-bc4b-09a8da617e15',UM_distinctid='15d188be71d50-013c49b12ec14a-3f73035d-100200-15d188be71ffd')
resp = requests.get(url,cookies = cookies)
#
把浏览器的
cookies
字符串转成字典
def cookies2dict(cookies):
items = cookies.split(';')
d = {}
for item in items:
kv = item.split('=',1)
k = kv[0]
v = kv[1]
d[k] = v
return d
注:用浏览器
cookies
发起请求后,如果请求频率过于频繁仍会被封
IP
,这时可以在浏览器上进行相应的手工验证(比如点击验证图片等),然后就可以继续正常使用该
cookies
发起请求。
三、
使用代理
可以换着用多个代理
IP
来进行访问,防止同一个
IP
发起过多请求而被封
IP
,比如:
# 要访问的目标页面
targetUrl =
"http://httpbin.org/ip"
# 要访问的目标HTTPS页面
# targetUrl = "https://httpbin.org/ip"
# 代理服务器
proxyHost =
"t.16yun.cn"
proxyPort =
"31111"
# 代理隧道验证信息
proxyUser =
"username"
proxyPass =
"password"
proxyMeta =
"http://
%(user)s
:
%(pass)s
@
%(host)s
:
%(port)s
"
% {
"host"
: proxyHost,
"port"
: proxyPort,
"user"
: proxyUser,
"pass"
: proxyPass,
}
# 设置 http和https访问都是用HTTP代理
proxies = {
"http"
: proxyMeta,
"https"
: proxyMeta,
}
(这里是用的亿牛云的动态转发代理进行示例)
不管我们采集什么网站的数据,光有代理是不行的,要配合多种反爬策略一起才能更高效的获取大量的数据。