【问题标题】:Scrapy: Traverse through subcategoriesScrapy:遍历子类别
【发布时间】:2017-11-21 15:57:31
【问题描述】:

我正在抓取供应商的网站。该供应商的产品分为类别和子类别。问题是并非所有产品都有子类别,而是所有产品都在类别中。

例如:

category1
  product1
  product2
  product3
  subcategory1
    product1
    product2

如您所见,product3 不在子类别中。它仅在 category1 中,产品 2 和 3 在类别中,但它们也在 subcategory1 中。

我正在开发一个将使用XMLItemExporter 的蜘蛛,并且我希望每个产品只在 XML 中出现一次 - 它是最具体的类别。

所以我想要输出:

product1 - category1>subcategory1
product2 - category1>subcategory1
product3 - category1

我必须遍历类别,因为产品的详细信息url 中没有提及类别,我想了解有关其类别和子类别的信息。

我做不到:

scrape category - scrape all products - scrape subcategory - scrape all products 

因为我会将子类别中的产品仅与类别一起抓取,因此 XML 中会有重复项。

您知道如何进行这项工作吗?

编辑:可能的解决方案?不知道我是否可以强制scrapy先抓取一种类型的链接。我是的,我会获取所有子类别的网址,从这些子类别中抓取产品,然后抓取所有类别。如果已经有刮掉的产品,我会跳过它。

【问题讨论】:

  • 从你的例子看来,product3 确实有一个与你写的相反的子类别。
  • @mrCarnivore 我不明白。参见示例 - p1,p2,p3 在 category1 中,但如您所见,subcategory1 仅包含 product1 和 product2
  • 您的编辑解决了歧义。

标签: python python-2.7 web-scraping scrapy


【解决方案1】:

我会分三个步骤来实现它:

  1. 第一步将构建一个完整的项目 URL 列表,其中包含相应的类别和子类别。

  2. 然后我会在这个列表上实现一些逻辑,以确保只使用最具体(即最深)的类别。

  3. 然后将清理后的 URL 列表提供给第二步抓取器,该抓取器将抓取实际项目数据。

比编码更多的策略,但希望它有所帮助。

总结:抓取 -> 清理 -> 抓取

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 2016-02-26
    • 2018-05-14
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多