如何建立一个价格比较程序,在多个网站上抓取产品的价格



我正在尝试建立一个供个人使用(和练习(的价格比较程序,该程序允许我在不同网站上比较同一商品的价格。我刚刚开始使用Scrapy库,并通过抓取网站进行游戏。每当我刮到一个新网站时,这些都是我的步骤:

1( 查找网站的搜索url,了解其模式并存储。例如,Target的搜索url由一个固定的url="https://www.target.com/s?searchTerm="加上搜索词(在解析的url中(

2( 一旦我知道网站的搜索url,我就会使用Splash库发送一个SplashRequest。我这样做是因为许多页面都加载了大量JS

3( 查找结果页面的HTML结构,并确定正确的xpath表达式来解析价格。然而,许多网站的结果页面根据搜索词或产品类别的不同而有不同的格式,从而改变了页面的HTML代码。因此,我必须检查所有可能的结果页面的格式,并提出一个可以解释所有不同格式的xpath

我发现这个过程非常低效、缓慢且不准确。例如,在步骤3中,即使我有正确的xpath,我仍然无法抓取页面中的所有价格(有时我还会得到HTML呈现页面中不存在的项目的价格(,这是我不理解的。此外,我不知道网站是否知道我的请求来自机器人,因此可能会向我发送错误或不正确的HTML代码。此外,这一过程无法实现自动化。例如,我必须为每个新网站重复步骤1和2。因此,我想知道是否有更有效的流程、库或方法可以帮助我完成这个程序。我也听说了一些关于使用网站的API,虽然我不太了解它是如何工作的。这是我第一次做抓取,我对网络技术不太了解,所以非常感谢任何帮助/建议!

爬行最常见的问题是,通常情况下,他们会从语法上决定要抓取的所有内容,而概念化要处理的实体会有很大帮助,我是根据自己的经验说的。

在我参与的一项关于抓取的研究中,我们得出了需要使用语义树的结论。该树应该包含节点,这些节点代表用于您的目的的重要数据,父子关系意味着父级将子级封装在HTML、XML或其他层次结构中。

因此,您需要某种概念来表示语义树,以及如何将其与站点结构映射。如果您的搜索方法允许您使用逻辑OR,那么您将能够为多个在线源定义相同的语义树。

另一方面,如果一些网站的所有者愿意让你抓取他们的数据,那么你可能会要求他们定义语义树。

如果给定网站的结构发生了变化,那么如果语义树的节点结构保持不变,则通常使用语义树,只需更改几个元素的选择器就可以遵守变化。如果一些所有者是允许抓取的合作伙伴,那么您将能够下载他们的语义树。

如果一个网站提供了API,那么你可以使用它,阅读RESTAPI来这样做。然而,这些API可能不是统一的。

最新更新