scrapy - 在Scrapy中组合蜘蛛

标签 scrapy

是否可以创建一个继承/使用两个基本蜘蛛的功能的蜘蛛?

我正在尝试抓取各种网站,我注意到在许多情况下该网站提供了站点地图,但这仅指向类别/列表类型页面,而不是“真实”内容。因此,我不得不使用 CrawlSpider(指向网站根目录),但这非常低效,因为它会爬行所有页面,包括大量垃圾。

我想做的是这样的:

  1. 启动我的 Spider(SitemapSpider 的子类)并将每个响应传递给 parse_items 方法。
  2. 在 parse_items 中测试页面是否包含“真实”内容
  3. 如果存在则处理它,如果没有则将响应传递给 CrawlSpider(实际上是我的 CrawlSpider 子类)来处理
  4. CrawlSpider 然后在页面中查找链接,例如 2 层深度, 处理它们

这可能吗?我意识到我可以将 CrawlSpider 中的代码复制并粘贴到我的蜘蛛中,但这似乎是一个糟糕的设计

最佳答案

最后,我决定扩展站点地图蜘蛛并从爬行蜘蛛中提取一些代码,因为它比尝试处理多重继承问题更简单,所以基本上:

class MySpider(SitemapSpider):
   def __init__(self, **kw):
      super(MySpider, self).__init__(**kw)
      self.link_extractor = LxmlLinkExtractor()

   def parse(self, response):
      # perform item extraction etc
      ...
      links = self.link_extractor.extract_links(response)
      for link in links:
        yield Request(link.url, callback=self.parse) 

关于scrapy - 在Scrapy中组合蜘蛛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26407631/

相关文章:

python - 如何使用 Viewstate 参数抓取页面请求?

python - 针对本地文件的 Scrapy shell

python - 抓取图片链接的问题

python-2.7 - 如何从选择器中获取一个元素

python - Scrapy Splash 截图?

python - 如何提取抓取图像的文件修改时间?

python - Scrapy/Python 中的增量分页

python - 使用 Scrapy 抓取网站时使用 Xpath 的混淆

web-scraping - 在 scrapy.Request 中添加 dont_filter=True 参数如何使我的解析方法起作用?

python - 为什么python scrapy显示 "twisted.internet.error.TimeoutError"错误