背景:

大多数情况下,我们遇到的是访问频率限制。如果你访问太快了,网站就会认为你不是一个人。这种情况下需要设定好频率的阈值,否则有可能误伤。如果大家考过托福,或者在12306上面买过火车票,你应该会有这样的体会,有时候即便你是真的用手在操作页面,但是因为你鼠标点得太快了,它都会提示你: “操作频率太快...”。

遇到这种网页,最直接的办法是限制访问时间。例如每隔5秒钟访问一次页面。但是如果遇到聪明一点的网站,它检测到你的访问时间,这个人访问了几十个页面,但是每次访问都刚好5秒钟,人怎么可能做到这么准确的时间间隔?肯定是爬虫,被封也是理所当然的!所以访问时间间隔你可以设定为一个随机值,例如0到10之间的随机秒数。

当然,如果遇到限制访问频率的网站,我们使用Selenium来访问就显得比较有优势了,因为Selenium这个东西打开一个页面本身就需要一定的时间,所以我们因祸得福,它的效率低下反而让我们绕过了频率检查的反爬虫机制。而且Selenium还可以帮我们渲染网页的JavaScript,省去了人工分析JavaScript源代码的麻烦,可谓一举两得。

下面是我经常使用的修改访问频率的几种场景,供大家参考:

1、Request 单机版爬虫:

上面的代码可以放在request请求之后

2、scrapy 单机版爬虫或者scrapy_redis分布式爬虫

在这里设置请求间隔时间,其他参数的讲解,我会更新到新的博文中,敬请大家期待

另外,不明确 scapy 和 scrapy_redis 区别的朋友们,可以移步到这里

3、有一种情况可以忽略

有些网站,比如在我之前遇到过的这种网站(hwt),服务器会限制你的访问频率,但是并不会封IP,页面将持续显示403(服务器拒绝访问),偶尔显示200(请求成功),那么就证明(前提是我们设置过请求头等信息),这样的反爬机制,只是限制了请求的频率,但是并不会影响到正常的采集,当然这样的情况也不多见,所以我们要学会针对性地写爬虫。

4、某些服务器由于性能原因,响应较慢(会导致响应超时,从而终止请求)

这种场景一般出现在小网站较多,如(DYW),在我们将请求的参数都安排好之后,却发现,由于服务器的性能原因,采集程序持续报网页404,出现这种情况我们只能延长响应超时的时长,如下图所示:

5、代理IP或者分布式爬虫:

如果对页的爬虫的效率有要求,那就不能通过设定访问时间间隔的方法来绕过频率检查了。

代理IP访问可以解决这个问题。如果用100个代理IP访问100个页面,可以给网站造成一种有100个人,每个人访问了1页的错觉。这样自然而然就不会限制你的访问了。

代理IP经常会出现不稳定的情况。你随便搜一个“免费代理”,会出现很多网站,每个网站也会给你很多的代理IP,但实际上,真正可用的代理IP并不多。你需要维护一个可用的代理IP池,但是一个免费的代理IP,也许在你测试的时候是可以使用的,但是几分钟以后就失效了。使用免费代理IP是已经费时费力,而且很考验你运气的事情。

大家可以使用http://icanhazip.com/ 这个网站来检测你的代理IP是否设定成功。当你直接使用浏览器访问这个网站的时候,它会返回你的IP地址。如下图所示:

通过requests,我们可以设置代理访问网站,在requests的get方法中,有一个proxies参数,它接收的数据是一个字典,在这个字典中我们可以设置代理。

大家可以在requests的官方中文文档中看到关于设置代理的更多信息:http://docs.python-requests.org/zh_CN/latest/user/advanced.html#proxies

我选择第一个HTTP类型的代理来给大家做测试,运行效果如下图所示:

从上图可以看出,我们成功通过了代理IP来访问网站。

我们还可以使用分布式爬虫。分布式爬虫会部署在多台服务器上,每个服务器上的爬虫统一从一个地方拿网址。这样平均下来每个服务器访问网站的频率也就降低了。由于服务器是掌握在我们手上的,因此实现的爬虫会更加的稳定和高效。这也是我们这个课程最后要实现的目标。

那么分布式的爬虫,动态代理IP是在settings.py中设置的,如下图:

然后在这里调用

最终是在middlewares.py中生效

有一些网站,他们每个相同类型的页面的源代码格式都不一样,我们必需要针对每一个页面写XPath或者正则表达式,这种情况就比较棘手了。如果我们需要的内容只是文本,那还好说,直接把所有HTML标签去掉就可以了。可是如果我们还需要里面的链接等等内容,那就只有做苦力一页一页的去看了。

python爬虫解决频繁访问_爬虫遇到IP访问频率限制的解决方案相关推荐

  1. python读取日志统计ip_使用python脚本实现统计日志文件中的ip访问次数

    使用python脚本实现统计日志文件中的ip访问次数,注意此脚本只适用ip在每行开头的日志文件,需要的朋友可以参考下 适用的日志格式: 106.45.185.214 - - [06/Aug/2014: ...

  2. 解决Weblogic 本机可以访问控制台,网络IP访问不了

    解决Weblogic 本机可以访问控制台,网络IP访问不了 解决方法: 英文版: 1.通过 http://localhost:7001/console/ 登录WebLogic的管理控制台 Lock & ...

  3. python网页版百度_python,_爬虫 页面不存在_百度搜索,python - phpStudy

    爬虫 页面不存在_百度搜索 1.学写爬虫,遇到一个问题,加了values={"wd":"test","ie":"utf-8&quo ...

  4. python爬虫实时更新数据_爬虫的增量式抓取和数据更新

    一些想法 页面爬的多了,量上去了之后,就会遇到其他的问题,其实不管做什么技术量大了都会有问题.一般情况下,我认为解决"大量"问题的思路有两个:一种是着力于优化系统的能力,让原本只能 ...

  5. 爬虫python和c语言区别_爬虫概述 - Python教程 - C语言网

    网络爬虫(又称为网页蜘蛛,网络机器人,更经常的称为网页追逐者),它按照一定的规则自动地抓取网络信息. 1. 产生背景 随着时代的进步,互联网上拥有大量的信息,但是我们该如何高效的获取这些信息成为了一个 ...

  6. python批量下载静态页面_爬虫实战之,爬取壁纸,批量下载

    一.前言 在开始写爬虫之前,我们先了解一下爬虫 首先,我们需要知道爬虫是什么,这里直接引用百度百科的定义 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按 ...

  7. 反爬虫兵法演绎04 _ 爬虫的首轮攻势:如何低调地拿到自己想要的数据?

    本资源由 Java学习者论坛 收集整理 04 | 爬虫的首轮攻势:如何低调地拿到自己想要的数据? 你好啊,我是DS Hunter.又见面了. 前面我和你聊了聊爬虫和反爬虫的历史,感觉这是一个内卷的死结 ...

  8. 未声明spire。它可能因保护级别而不可访问_信息系统安全:访问控制技术概述...

    1.访问控制基本概念 身份认证技术解决了识别"用户是谁"的问题,那么认证通过的用户是不是可以无条件地使用所有资源呢?答案是否定的.访问控制(Access Control)技术就是用 ...

  9. localhost可以访问 ip不能访问_为啥用 ip 不可以访问知乎,而百度却可以?

    (给算法爱好者加星标,修炼编程内功) 作者:帅地 (本文来自作者投稿) 我们先来ping知乎的域名,然后可以得到响应的服务器的ip, 之后我们用浏览器来访问这个ip,结果如下 被拒绝访问了. 而用ip ...

最新文章

  1. 华大 MCU 之七 DMA 导致 SPI 异常停止的原因分析、DMA 配置的那些坑
  2. swift date 计算差_[Swift 设计模式] 适配器
  3. P6242-[模板]线段树3【吉司机线段树】
  4. 《零基础》MySQL UPDATE 更新(十四)
  5. jquery 判断元素可见性
  6. VSCode使用VIM复制内容到系统剪切板
  7. 当synchronized遇上integer
  8. html关机命令,自动关机命令 定时关机命令
  9. Android下载PDF文件
  10. 怎么注册Github?用手机2分钟完成注册,互联网就是互相连接
  11. 您的APP上架,遇到【安全评估报告】这道门槛了吗?
  12. 【6G】基于 Dyncast 的算力网络架构
  13. 11.软件测试-----性能测试
  14. 机器学习数学基础知识
  15. 痛惜!年仅43岁,又一位985高校博导因病逝世
  16. Unity 判断是否为预制体的根节点
  17. 嘉为蓝鲸荣获广东省电子政务与新型智慧城市发展大会表彰
  18. C++通过三点坐标,获取夹角
  19. 上传图片前不上传预览?
  20. SQL语句查看重复值

热门文章

  1. Nacos 是如何同时实现AP与CP的
  2. Android 加密算法归纳
  3. 笔记[M-SFANet]Encoder-Decoder Based Convolutional Neural Networks with Multi-Scale-Aware Modules...
  4. 金蝶K/3的技术架构
  5. H3C 小贝WA5320(云AP)瘦转胖版本操作
  6. 西工大计算机组成与系统结构实验,Mars4_5.jar 文件怎么使用,为什么我打不开吖?
  7. 2023年中高级Android面试题汇总(不断更新中)
  8. 通过Network Slimming学习高效卷积网络
  9. Keras 常用的图像增强方式
  10. python面向对象与装饰