许多在线商店提供站点地图文件,其中包含以下形式的产品信息:
...
<url>
<loc>http://blabla.com/tbcart/pc/-DOOR-GYM-Full-Body-Exerciser-256p34168.htm</loc>
<lastmod>2010-11-26</lastmod>
<changefreq>weekly</changefreq>
</url>
...
但是要使在线价格比较服务发挥作用,除了URL之外,它还需要实际的产品价格。假设在线商店的典型站点地图包含20'000个网址,您将如何获得每个产品的实际价格?这是应该如何使用站点地图来获得产品价格?
执行20'000 Http Get请求很可能会导致在线商店阻止抓取工具的IP:)
谢谢,
PS - 这会如何扩展?就像一个有50'000链接的站点地图,让我们说每个星期天需要重新索引,这意味着在一整天中每2秒发送1个请求,如何在这种情况下避免被阻止?
答案 0 :(得分:0)
您必须对所有URL执行GET,然后解析HTML以提取价格。你是对的,如果你在网站上找到他们所有的产品,他们可能会禁止你,所以你需要包含一些聪明的逻辑来分散负载,这样就不会对商店造成太大的影响。然后,如果你变得棘手,你可以确定是否有一些产品的价格变化更频繁,那么你可以重新扫描这些产品的价格。 另外值得注意的是,并非所有站点都提供站点地图,在这种情况下,您必须抓取站点并解析产品URL的HTML(就像搜索引擎一样)。
答案 1 :(得分:0)
你真的需要每个星期天重新索引网站吗?您的示例中似乎设置了lastmod-tag,因此您可以将整个网站作为基础进行抓取,然后在整周(而不仅仅是一天)检查已修改的网页。如果网站已更改,您可以重新抓取该网站,然后将此域中下一页的延迟设置为robots.txt中的值(如果已设置)或几秒钟(5可能已经确定)。
但是,这仅适用于店主在价格变更时更改lastmod-tag(而不仅仅是当他更改描述文本时)。如果lastmod没有改变,你必须采取Haukman的方法并测量页面上的更改之间的平均时间(如果你重新抓取页面并且价格没有改变,延迟下一次访问;如果它已经改变,甚至尝试一下下次更快。)