【问题标题】:Scrapy: how to build an item gathering information from several URLs?Scrapy:如何构建一个从多个 URL 收集信息的项目?
【发布时间】:2012-08-04 17:13:19
【问题描述】:

经过多年不情愿地将爬虫编码为正则表达式和 BeautifulSoup 等的混搭,我找到了Scrapy,我几乎将其视为今年送给自己的圣诞礼物!它使用起来很自然,而且它似乎是为了让几乎所有东西都变得优雅和可重复使用而构建的。

但我遇到了一种我不知道如何解决的情况:我的蜘蛛抓取并抓取了一个列表页面 A,我从中生成了一组项目。但是对于每个项目,我需要获取一个独特的补充链接(由一些抓取的信息构成,但不是明确的 Scrapy 可以遵循的页面上的链接)以获取更多信息。

我的问题分为两部分:在抓取过程之外获取 URL 的协议是什么?如何以优雅的方式从多个来源构建项目?

这已在 StackOverflow 上的 previous question 中部分提出(并回答)。但我更感兴趣的是在这个用例中 Scrapy 的哲学应该是什么——肯定不是不可预见的可能性?我想知道这是否是管道注定要用于的事情之一(从主要信息推导出的辅助来源添加信息是“后处理”实例),但是最好的方法是什么?没有完全打乱 Scrapy 高效的异步组织?

【问题讨论】:

  • 你是什么意思 bt > 在抓取过程之外获取 URL?
  • @warwaruk:抓取通常有一个(一组)起始 URL,获取这些页面并将找到的链接添加到队列中。 “在抓取过程之外”是指获取一个既不在起始集中,也不作为所获取页面中的锚点给出的链接——我的意思是从被抓取的信息中通过算法推导出的 URL。
  • @warwaruk:谢谢,太完美了!我还有一个问题:从无法以相同方式解析的多个站点(例如,亚马逊的列表和沃尔玛的列表)但我想汇总它们时,最佳实践是什么?我应该做几个蜘蛛吗?是否有可能在同一个蜘蛛中根据域有多个回调?
  • 我通常会做不同的蜘蛛,因为解析方法逻辑不同。更清楚了。此外,不同的站点可能需要不同的(每个蜘蛛)设置,例如下载延迟等。如果您有通用功能 - 使用通用方法制作自己的基础蜘蛛。
  • @warwaruk:谢谢你的帮助!

标签: python web-scraping scrapy pipeline


【解决方案1】:

在抓取过程之外获取 URL 的协议是什么?

当您创建Request 并为其提供网址时,您从哪里下载网址并不重要。您可以从页面中提取它,或以其他方式构建。

如何以优雅的方式从多个来源构建项目?

使用Request.meta

【讨论】:

  • 最后一个问题,假设我有多个蜘蛛,是否有可能将所有项目送入同一管道,然后使用technique described in the manual 合并“重复项”?
  • 我不明白 - 需要更多信息。如果与此问题无关,我建议创建一个新问题。
猜你喜欢
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 2018-01-22
  • 2012-05-26
  • 2020-03-12
  • 2014-07-05
  • 2016-07-15
相关资源
最近更新 更多