本文摘自php中文网,作者little bottle,侵删。
在编写爬虫爬取数据的时候,尤其是爬取大量数据的时候,因为很多网站都有反爬虫措施,所以很容易被封IP,就不能继续爬了。本文就如何解决这个问题总结出一些应对措施,这些措施可以单独使用,也可以同时使用,效果更好。伪造User-Agent
在请求头中把User-Agent设置成浏览器中的User-Agent,来伪造浏览器访问。比如:
1 2 | 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)
|
在每次重复爬取之间设置一个随机时间间隔
1 2 3 4 | # 比如:
time.sleep(random.randint(0,3)) # 暂停0~3秒的整数秒,时间区间:[0,3]
# 或:
time.sleep(random.random()) # 暂停0~1秒,时间区间:[0,1)
|
伪造cookies
若从浏览器中可以正常访问一个页面,则可以将浏览器中的cookies复制过来使用,比如:
1 2 | cookies = dict(uuid= 'b18f0e70-8705-470d-bc4b-09a8da617e15' ,UM_distinctid= '15d188be71d50-013c49b12ec14a-3f73035d-100200-15d188be71ffd' )
resp = requests.get(url,cookies = cookies)
|
1 2 3 4 5 6 7 8 9 10 | # 把浏览器的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,比如:
1 2 3 | proxies = { 'http' : 'http://10.10.10.10:8765' , 'https' : 'https://10.10.10.10:8765' }
resp = requests.get(url,proxies = proxies)
# 注:免费的代理IP可以在这个网站上获取:http:
|
【推荐课程:Python视频教程】
以上就是python爬虫防止IP被封的方法的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python64位和32位区别
Python中的end怎么用
Python析构函数与构造函数的用法讲解
Python中len()的用法
用Python语言描述最大连续子序列和
基于tpc-c基准的Python orm的性能测试详解
Python基本语句有哪些
Python怎么逐行读写txt文件
Python中的yield关键字的用法介绍(代码示例)
Python中的for循环语句怎么写
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python爬虫防止IP被封的方法