在编写爬虫爬取数据的时候,因为很多网站都有反爬虫措施,所以很容易被封IP,就不能继续爬了。在爬取大数据量的数据时更是瑟瑟发抖,时刻担心着下一秒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)

还可以先收集多种浏览器的User-Agent,每次发起请求时随机从中选一个使用,可以进一步提高安全性:

In [7]: import requests,random

In [8]: user_agents = ['Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50','Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11']

In [9]: def get_html(url):

...: headers = {'User-Agent':random.choice(user_agents)}

...: resp = requests.get(url,headers = headers)

...: return resp.text

把上面随机选择一个User-Agent的代码封装成一个函数:

import random

def get_headers():

'''

随机获取一个headers

'''

user_agents = ['Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50','Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11']

headers = {'User-Agent':random.choice(user_agents)}

return 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/

附:GitHub上的一个"反反爬虫"项目

道高一尺魔高一丈,你有反爬虫措施,那我也有各种"反反爬虫"的措施,GitHub上就有一位大神专门整理了一个这样的项目:Anti-Anti-Spider,可以研究一下。

python爬虫解决频繁访问_python爬虫防止IP被封的一些措施相关推荐

  1. python爬虫解决频繁访问_爬虫遇到IP访问频率限制的解决方案

    背景: 大多数情况下,我们遇到的是访问频率限制.如果你访问太快了,网站就会认为你不是一个人.这种情况下需要设定好频率的阈值,否则有可能误伤.如果大家考过托福,或者在12306上面买过火车票,你应该会有 ...

  2. python爬虫解决频繁访问_python3拉钩网爬虫之(您操作太频繁,请稍后访问)

    你是否经历过这个: 那就对了~ 因为需要post和相关的cookie来请求~ 所以,一个简单的代码爬拉钩~~~ import requests import time import json def ...

  3. python 获取html js 变量_Python爬虫与反反爬虫实践

    因为要收集数据,所以打算自己撸一个爬虫,期间碰到网站的反爬措施,让我非常头疼,在此记录一下. 基础 爬虫的基础是不需要自己手动通过浏览器访问网页,而是通过程序构造网络请求,获取网站返回的结果.例如使用 ...

  4. python爬虫知乎点赞_Python爬虫爬取知乎小结

    最近学习了一点网络爬虫,并实现了使用Python来爬取知乎的一些功能,这里做一个小的总结.网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本.我们知道机器学习和数据挖掘等都是从大量的数据出 ...

  5. python基础知识500题_python爬虫基础知识点整理

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

  6. Python正则匹配HTML,python正则匹配html标签_Python爬虫常用正则表达式及HTML网页标签分析总结...

    这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法.它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~ 当然如果会Selenium基于自动化测试爬 ...

  7. python运势预测程序_Python 爬虫系列之一——每日星座运势

    开个新坑--Python 爬虫系列,最近脑子里有很多非常有趣的想法,但实现起来都需要一些简单的爬虫知识,如果放在趣学 Python 系列,会显得文章太长,干脆拿出来开个新坑.这个系列本质上是为趣学 P ...

  8. python正则匹配html标签_Python爬虫常用正则表达式及HTML网页标签分析总结

    这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法.它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~ 当然如果会Selenium基于自动化测试爬 ...

  9. python爬虫要安装什么_python爬虫之分布式爬虫和部署

    分布式爬虫:爬虫共用同一个爬虫程序,即把同一个爬虫程序同时部署到多台电脑上运行,这样可以提高爬虫速度. 在默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queu ...

  10. python爬取cctalk视频_python爬虫urllib使用和进阶 | Python爬虫实战二

    python爬虫urllib使用和进阶 上节课已经介绍了爬虫的基本概念和基础内容,接下来就要开始内容的爬取了. 其实爬虫就是浏览器,只不过它是一个特殊的浏览器.爬取网页就是通过HTTP协议访问相应的网 ...

最新文章

  1. 【阿里Q3财报:阿里云去年营收破百亿,亚洲市场遥遥领先】
  2. 2021 EdgeX 中国挑战赛决赛入围名单公布
  3. 基于函数计算的游戏打包最佳实践
  4. [C/C++基础知识] 面试再谈struct和union大小问题
  5. 海量小文件场景下训练加速优化之路
  6. Maven:构建web工程出现Failed to execute goal org.apache:maven-archetype-plugin:3.1.1:generate (default-cli)
  7. 转]Linux杀死进程方法大全
  8. python如何移动图片_Pygame的图像移动|python基础教程|python入门|python教程
  9. mysql 瓶颈诊断_MySQL 监控、性能瓶颈排查
  10. 使用logstash迁移es数据
  11. win10家庭版安装iis 微软web服务器 windows安装IIS web服务器
  12. 写在午夜之时 ——《doom启示录》读后感(一)
  13. 西电捷通IWN2410(V600)WAPI鉴别服务器生成的PEM(X.509)证书文件样式
  14. IDEA中使用SVN IDEA配置SVN步骤(git也是)
  15. pc彩色版伏魔记开放Java源码
  16. 【Echart】在百度地图中实现飞机航线效果
  17. .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
  18. 《计算传播学导论》读书笔记——第二章文本分析简介
  19. 混凝土试块送检要求与时间
  20. Python基础(适合初学-完整教程-学习时间一周左右-节约您的时间)

热门文章

  1. 云科技网络验证源码_APK云科技网络验证-APK一键加网络验证一键加弹窗引流
  2. lpx寒假作业案例15
  3. Python的图像处理库Pillow
  4. 网页转圈打不开服务器,打不开网页怎么回事
  5. python3用turtle模块画一棵随机樱花树
  6. Installing vipm-17.0.2018-linux
  7. C++实现IE缓存迭代器
  8. python有道云笔记_Python自动同步有道云笔记到Hexo
  9. JMeter(三):后置处理器[Regular Expression Extractor]
  10. c语言 tls单向认证 验证证书,使用wireshark观察SSL/TLS握手过程--双向认证/单向认证...