如何加快网络爬行ids-nokogiri / ruby​​的迭代速度

时间:2014-10-30 18:30:57

标签: ruby web-crawler nokogiri

我想要做的是迭代所有可能的产品页面给出10位数字ID

我想要抓取的页面示例是somewebsite.com/product?productid=10000000000

刮刀会转到页面查看是否存在标签以查看它是否为产品页面,然后记录该网址(如果存在),或者如果不存在则移至下一页。

迭代1逐1(productid =大数++)太慢了,从查看一些示例产品id看起来没有模式的数字如(121212121212)更有可能我想问什么是迭代方式通过这些页面在更合理的时间内。我现在用nokogiri在红宝石中这样做。

1 个答案:

答案 0 :(得分:1)

迭代这些产品ID对于处理目标网站来说是一种可怕的方式,并且很可能会被禁止,因为它们的产品不可能按顺序编号。换句话说,您将获得大量遗漏的页面响应,这些响应将被记录,如果他们的Web开发团队体面,他们将获得与请求IP一起的列表。

相反,要聪明并找到一个列出其所有产品的页面,解析该列表,然后再进行操作。如果没有包含它们的单个页面,但有许多页面,则从第一页开始并将它们全部移动直到您到达最后一页。将产品ID聚合到一个数组中,或在读取每个页面时处理它们。

此外,通过在迭代之间睡觉,对他们的网站非常温和和善良。如果不这样做也会让你被禁止,因为请求数千个页面,一个接一个地,将推动他们的主机的CPU,网络使用,这再次提醒他们你正在抓住他们的网站并对他们的能力产生负面影响为普通客户服务。

最后,如果你真的想以正确的方式做事,你第一次与网站的连接应该要求他们的" robots.txt"文件。处理它,并在代码中使用这些指令。该文件放在那里帮助机器人/蜘蛛/刮刀做正确的事情,而不是不公平地对抗网站的网站或网站管理员。没有做到这一点是被禁止的可靠途径。更多信息可在" The Web Robots Pages"和" Robots exclusion standard"。