在编写爬虫爬取数据的时候,尤其是爬取大量数据的时候,因为很多网站都有反爬虫措施,所以很容易被封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)
伪造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,比如:
proxies = {'http':'http://10.10.10.10:8765','https':'https://10.10.10.10:8765'}resp = requests.get(url,proxies = proxies)# 注:免费的代理ip可以在这个网站上获取:http://www.xicidaili.com/nn/
【推荐课程:python视频教程】
以上就是python爬虫防止ip被封的方法的详细内容。
