网上刮刮礼仪
我正在考虑编写一个简单的networking抓取应用程序来从网站提取信息,似乎并没有明确禁止这一点。
我已经检查了其他的select(例如RSS,networking服务)来获取这些信息,但在这个阶段没有可用的。
尽pipe如此,我还自己开发/维护了一些网站,所以我意识到,如果networking抓取是天真地/贪婪地完成,可能会减慢其他用户的使用,并且通常会变成麻烦。
那么,礼仪涉及到什么方面:
- 每秒/分钟/小时的请求数。
- HTTP用户代理内容。
- HTTP Referer内容。
- HTTPcaching设置。
- 较大文件/资源的缓冲区大小。
- 合法性和许可问题。
- 使用好的工具或devise方法。
- Robots.txt,这是相关的网页抓取或只是爬虫/蜘蛛?
- 压缩比如GZip中的请求。
更新
在Meta上find了这个相关的问题: ScreenSapping StackOverflow的礼节 。 杰夫·阿特伍德的答案有一些有用的build议。
其他相关的StackOverflow问题:
HTML抓取的选项
请遵守网站的robot.txt要求,这可能是达成协议的最佳和最合乎道德的方式之一,而无需向网站上的任何人讲话。
请在UserAgent标头中适当标识自己。 通过这样做,网站可以看到你是谁,并明确地限制/允许他们网站的某些区域给你。 例如,看看大家伙的用户代理,谷歌列在下面,并devise一个类似的页面描述你是谁,以及如何通知你的机器人爬行。
Google的用户代理string:Googlebot / 1.0(googlebot@googlebot.com http://googlebot.com/ )
如果站点支持,请使用压缩gzip / deflate,这可以节省您的时间和站点带宽。
如果您遵循robots.txt和服务条款,从法律angular度来看,您应该可以(虽然我不是律师或法律专家)。
最后,我认为最好的build议是从runrunraygun考虑它的一个单独的网站。 联系pipe理员,看看什么是可以接受的,并尊重他们的愿望会让你远离。
robots.txt
是相关的:看看它,以了解网站对非人类读者的态度。 显示其内容的一些意识将提供一些保证,当您通过电子邮件发送您的网站pipe理员,你会照顾尊重的网站,当你刮。
我build议给网站pipe理员发电子邮件,告诉他们你正在写一个非恶意的脚本等,询问他们对你的打击和打击的频率。
我们运行一个域名抓取工具,它从友好的域名中提取pdf / word文档等,我们所要求的最多的是请求之间的5秒差距,并且只在晚上运行。
这真的取决于你在刮什么,以及你刮了多less。 比如,一个星期前我不得不写一个刮板来抓取几百页。 为了慷慨,我在每页之后等待了一秒钟。 花了几分钟的时间来获取数据,但我相信网站的所有者会感激我可以留在这个过程中的任何松懈。
我还要补充说的是,即使是Python有一个全局解释器锁例如GIL如果你要求数据和速度的本质使用import multithreading
模块可以是相当有用的,因为请求需要时间来完成。 同时,如果您要求大量数据(提出大量请求),则可能会被禁止,并且连接可能会被阻止。 没有办法来告诉门槛,除非你做testing。
- 每个域约5秒延迟 您可以根据网站返回内容的速度来调整延迟时间。
- 用户代理设置为通用浏览器,以便正常显示网站
- 引荐来源设置为页面链接的地方
- 我caching多长时间取决于网站。 通常是1个月。
- 我只下载文本和图像文件
- “容易请求宽恕比获得许可”
- 我使用现有的Python库,例如lxml , 还有一些是我自己开发的
- networking抓取涉及爬虫/蜘蛛,所以是robots.txt是相关的
- 总是压缩
我做了很多网页抓取,发现大多数网站都没有跟踪IP的可疑行为。
如果您担心,不要直接从目标网站下载内容,您可以使用Google Cache,Archive.org等。或者使用代理。
如果您正在为您的业务获取数据,那么使用专门的networking抓取服务总是更好。 由于networking抓取是一个技术密集型的过程,因此在内部进行这个过程可能会很容易地浪费您的资源,并影响公司的发展。