2014-10-30 49 views
0

我想要做的是通过所有可能的产品页面重复给予10位数字的ID如何加快网页抓取IDS-引入nokogiri /红宝石迭代

我想刮的页面的例子somewebsite.com/product?productid=10000000000

刮板会进入页面查看是否存在标签以查看它是否为产品页面,然后记录该URL(如果是)或者如果它移动到下一页面不是。

做迭代1乘1(productid = large number ++)太慢了,看起来有些样本产品ID看起来像没有模式的数字,例如(121212121212)更有可能我想问什么是一种方法在更合理的时间内遍历这些页面。我现在正在用nokogiri做红宝石。

+1

我们需要查看当前用于迭代的代码,将其分解为仅处理该部分的裸代码。我们还需要更好地理解ID。 – 2014-10-30 18:40:29

+0

使用遏制宝石下载所有页面,然后解析它们。 https://github.com/taf2/curb – Duck1337 2014-10-31 20:31:54

回答

1

对这些产品ID进行迭代是处理目标网站的一种可怕方式,而且赔率很高,因此您将被禁止,因为它们的产品不太可能按顺序编号。换句话说,你会得到很多丢失的页面响应,这些响应将被记录下来,并且如果他们的web开发团队很体面,他们会得到那些与请求IP一起的列表。

相反,要聪明一点,找到一个列出他们所有产品的页面,解析出这个列表,然后走它。如果没有一个包含它们的页面,但很多,然后从第一页开始,全部走到最后一页。将产品ID汇总到一个数组中,或者在您阅读每个页面时处理它们。

另外,通过在迭代之间进行睡眠,对他们的网站要非常温柔和友善。如果不这样做,也可能导致你被禁止,因为请求数以千计的页面,一个接一个地点,将驱动他们的主机的CPU和网络使用,这将再次提醒他们你正在窜改他们的网站并对他们服务普通客户的能力产生负面影响。

最后,如果您真的想以正确的方式做事,您首次连接到网站应该请求其“robots.txt”文件。处理它,并在你的代码中使用这些指令。该文件被放置在那里,以帮助机器人/蜘蛛/刮板做正确的事情,而不是不公平地对抗该网站或网站的管理员。未能这样做是被禁止的肯定途径。更多信息请参见“The Web Robots Pages”和“Robots exclusion standard”。