3

我想抓取一个关于一些问题和答案的 3 深度网站。它有一个简单的结构,如下所示:

  • 第二深度 -> 包含数据(问题描述)

  • 第三深度 -> 包含实际数据(问题和答案)

      /prob
        +-> /prob/problemLists.html
          +-> /prob/problem123456.html
    

response.meta['depth']我使用as 条件编写了如下 Scrapy 代码。

有没有更好的方法来做到这一点?

class DmzSpider(CrawlSpider):
    rules = (
         Rule(SgmlLinkExtractor(deny=('index\.htm',callback='parse_list'))),
    )

    def parse_list(self, response):
        if response.meta['depth'] == 2:
        # Scrape descriptions ...
        return items

        elif response.meta['depth'] ==3:
            parse_item(response)
        
    def parse_item(self, response):
        # Parse items and save it according to prob_id...

        return items
    

我还尝试了以下 3 个选项,但没有一个有效,并且 request_depth_max=1 总结为:

  1. 添加:从 scrapy.conf 导入设置 settings.overrides['DEPTH_LIMIT'] = 2 到蜘蛛文件
  2. 使用 -s 选项运行命令行: /usr/bin/scrapy crawl -s DEPTH_LIMIT=2 mininova.org
  3. 添加到 settings.py 和 scrapy.cfg:DEPTH_LIMIT=2

应该如何配置为1以上?

4

1 回答 1

1

在这种情况下,您可以将深度限制设置为 3,请参阅Scrapy 文档中的设置页面

于 2012-07-24T15:09:14.880 回答