python爬虫系统学习十一:常见反爬虫机制与应对方法

数据头User-Agent反爬虫机制解析 我们小时候都听过一首儿歌。我说一个开头,大家肯定能把剩下的几句背出来:小兔子乖乖,把门打开… 当我们使用浏览器访问网站的时候,…

数据头User-Agent反爬虫机制解析

我们小时候都听过一首儿歌。我说一个开头,大家肯定能把剩下的几句背出来:小兔子乖乖,把门打开…

当我们使用浏览器访问网站的时候,浏览器会发送一小段信息给网站,我们称为Request Headers,在这个头部信息里面包含了本次访问的一些信息,例如编码方式,当前地址,将要访问的地址等等。这些信息一般来说是不必要的,但是现在很多网站会把这些信息利用起来。其中最常被用到的一个信息,叫做“User-Agent”。网站可以通过User-Agent来判断用户是使用什么浏览器访问。不同浏览器的User-Agent是不一样的,但都有遵循一定的规则

例如,我们在windows上面的Chrome浏览器,它的User-Agent是:

python爬虫系统学习十一:常见反爬虫机制与应对方法

但是如果我们使用Python的Requests直接访问网站,除了网址不提供其他的信息,那么网站收到的User-Agent是空。这个时候网站就知道我们不是使用浏览器访问的,于是它就可以拒绝我们的访问。

例如

没有User-Agent的情况

python爬虫系统学习十一:常见反爬虫机制与应对方法

User-Agent的情况

python爬虫系统学习十一:常见反爬虫机制与应对方法


如何获取网站的 User-Agent 呢?请打开 Chrome,任意打开一个网站,然后右键,“检查” 打开开发者工具,定位到 “Network” 选项卡,并刷新网页,如下图所示:

python爬虫系统学习十一:常见反爬虫机制与应对方法

在左下角会出现当前网页加载的所有元素。随便点一个元素,于是在右下角会出现对当前元素的请求信息。在里面找到Request Headers这一项,里面的内容即为我们需要的内容。

不同的网站,Request Headers 是不同的

提示:requests的 get方法,post方法,Session模块的get方法,post方法,都支持自定义Headers,参数名为headers, 它可以接收字典作为参数。


我们可以通过字典来设定Headers,例如:

python爬虫系统学习十一:常见反爬虫机制与应对方法

在 requests 中,使用如下代码来提交 Headers:

python爬虫系统学习十一:常见反爬虫机制与应对方法

或者Session模块:

python爬虫系统学习十一:常见反爬虫机制与应对方法

检查User-Agent是一种最简单的反爬虫机制,而通过设定Request Headers中的User-Agent,可以突破这种机制。


访问频率限制

我们访问一些网站,由于一些网站的访问时间设置,我们是不能快速进入下一页的,这个时候,我们需要修改他的访问时间,在它访问下一页的时候,通过 POST 方式,修改 read_time,正常访问的话,这个值一般会大于10如果我们修改成 60。于是轻轻松松的通过了它的反爬虫策略。

上面这种情况我们现在已经极少会遇到了,因为这种办法根本没有任何的防御能力。猜测这个策略可能是某个新人写的。

修改访问频率:

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

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

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


代理IP或者分布式爬虫:

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

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

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

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

python爬虫系统学习十一:常见反爬虫机制与应对方法

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

python爬虫系统学习十一:常见反爬虫机制与应对方法

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

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

python爬虫系统学习十一:常见反爬虫机制与应对方法

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

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


蜜罐技术

蜜罐这个词,最早是来自于网络攻防中。一方会故意设置一个或者几个服务器,故意留下漏洞,让另一方轻易的入侵进来。这些被故意设置的服务器,就叫做蜜罐。里面可能安装了监控软件,用来监控入侵者。同时,蜜罐还可以拖延入侵者的时间。

在反爬虫的机制中,也有一种蜜罐技术。网页上会故意留下一些人类看不到或者绝对不会点击的链接。由于爬虫会从源代码中获取内容,所以爬虫可能会访问这样的链接。这个时候,只要网站发现了有IP访问这个链接,立刻永久封禁该IP + User-Agent + Mac地址等等可以用于识别访问者身份的所有信息。这个时候,访问者即便是把IP换了,也没有办法访问这个网站了。给爬虫造成了非常大的访问障碍。

不过幸运的是,定向爬虫的爬行轨迹是由我们来决定的,爬虫会访问哪些网址我们都是知道的。因此即使网站有蜜罐,定向爬虫也不一定会中招。


其他反爬虫机制

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

这种网站很少,因为如果每个页面的源代码格式都不一样,要不就用户体验查,要不就做网页的内容会被累个半死。

我们之前讲到的登录验证和我们下一章将要讲到的验证码也是反爬虫策略。目前我们已经解决了登录的问题,下一章我们将会解决验证码的问题。

Kitchen website. Size is going to be the biggest concern moving forward for the athletic Engram, who stands only 6 3 and tips the scales at 227 pounds. Long beard, Yelu was a tempering voice during Mongol rule. You can make a list the stores where you can find good quality shirts. Remove all non permanent materials from your body that may possibly cause harm, such as contact lenses and jewelry. Some laws say employers cannot ask about misdemeanors, arrests without convictions, or convictions that are expunged or annulled. Meanwhile, Orgeron and his teammates salvaged an impressive season. Groundbreaking entrepreneurs Lawrence and Joe Gilligan continue to invest in research and development in their quest for the perfect glove.. 2 must start against No. Countering with thrusts of his own, cuts, pulls and glides off his pads, the maestro scored 116 of India’s 238. The odds are slightly higher for breast cancer, accounting for about 5 percent of all cases. He retired for good after that season.. It is the method you used to reach the conclusions you draw in your paper or cheap nfl jerseys project. Yes, you read that right, and the funny part is, this is not the first time that this has happened to the star running back. Before his passing. Kids can also have a jersey of the elite players of each Cheap Football Jerseys of the teams. If you’re standing in a lush grass lawn, then yeah, there might be tiny, harmless spiders right under your feet or as close as a few centimeters. “People hold the NFL to a very high standard.”. 8. Julio Jones is outstanding, the best receiver in football. “It’s being able to read a story to your girls at night, lay on the couch. While the Patriots certainly did plenty wrong in Week 4, one bright spot ray ban outlet was Martellus Bennett’s performance: 5 catches, 109 yards. My jump has elevated over 8 inches and I need to show you just how I did this. But is it truly “tremendous” for sports teams to be creating “military affairs” departments? As our sporting “heroes” celebrate our military ones, does not a dangerous blurring take place, especially in the minds of cheap oakleys America’s youth?. The rash of ray bans ale intertrigo, in contrast to jock itch, is usually bright red and moist and without dry scale. Subscribe to USA TODAYAlready a print edition subscriber, but don’t have a login?Activate your digital access.Manage your wholesale nfl jerseys account settings. It’s rough down in the trenches, where linemen weighing more than three hundred pounds cheap oakleys hurl themselves at one another in brutal hand to hand combat, but it is nothing compared to the pain I kept buried inside so I could play out my dream..

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回顶部
本页面加载共:44 次查询 | 用时 0.877 秒 | 消耗 52.70MB 内存