如何在网络抓取期间保持网络礼貌(避免被禁止)?

Posted

技术标签:

【中文标题】如何在网络抓取期间保持网络礼貌(避免被禁止)?【英文标题】:How to maintain web-politeness (avoid being banned) during web-crawl? 【发布时间】:2011-05-28 03:28:45 【问题描述】:

一个抓取您的网站并使用带宽资源的网络机器人。

机器人数量众多,用途广泛,从自制、大学研究、抓取工具、新创业公司到成熟的搜索引擎(可能还有更多类别)

除了可能向网站发送流量的大型搜索引擎之外,为什么网站管理员允许其他他们不立即知道目的的机器人? 网站管理员允许这些机器人的动机是什么?

第二个问题是:

如果一个分布式爬虫在互联网上有多个爬虫节点,为每个代理使用不同的 User-Agent 字符串,因为如果它们都使用相同的 UA,那么通过多个代理进行扩展的好处会大大降低。 因为具有高抓取延迟集的大型网站,可能需要数周或数月才能完全抓取。

第三个问题: 由于 robots.txt(唯一定义的抓取控制方法)处于域级别。 爬虫是否应该针对每个域或每个 IP 制定礼貌政策(有时许多网站托管在同一个 IP 上)。

如何解决这样的网络礼貌问题?还有其他需要注意的相关事项吗?

【问题讨论】:

【参考方案1】:

    除了搜索引擎机器人之外,还有许多有用的机器人,而且搜索引擎的数量也在不断增加。在任何情况下,您想要阻止的机器人都可能使用了不正确的用户代理字符串并忽略了您的 robots.txt 文件,那么您将如何阻止它们呢?一旦检测到它们,您可以在 IP 级别阻止它们,但对于其他的则很难。

    用户代理字符串与抓取速度无关。数以百万计的浏览器用户都在使用相同的用户代理字符串。网站会根据您的 IP 地址限制访问。如果您想更快地抓取他们的网站,您将需要更多的代理,但实际上,您不应该这样做 - 您的抓取工具应该有礼貌,并且应该缓慢地抓取每个单独的网站,同时在许多其他网站上取得进展。

    爬虫应该对每个域都礼貌。一个 IP 可以为许多不同的服务器提供服务,但这对于来回传递数据包的路由器来说并不困难。每个单独的服务器可能会限制您维持多个连接的能力以及您可以消耗多少带宽。还有一个网站由多个 IP 地址提供服务的场景(例如循环 DNS 或更智能的东西):有时像这样的网站上的带宽和连接限制会发生在路由器级别,所以再一次,每个域都有礼貌。

【讨论】:

以上是关于如何在网络抓取期间保持网络礼貌(避免被禁止)?的主要内容,如果未能解决你的问题,请参考以下文章

Python为啥会被叫爬虫?

如何在 Python 中使用 *** 进行网络抓取?

如何在电脑上抓取手机浏览器的数据包

如何建立自己的网络爬虫

世界杯期间如何保障企业网络畅通?

如果我把CDR网络禁止掉是否就不会翻车了