本文摘自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被封的方法的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python中记录循环次数的方法
Python中range() 函数的使用介绍(附代码)
Python如何计算1到100的和
深入了解Python之xml操作
Python实现log日志的示例代码
Python怎么右对齐
Python生成器定义与简单用法实例分析
初学Python 请教学习路线
ipad上可以运行Python么
总结Python字符串重点内容
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python爬虫防止IP被封的方法