3

いくつかの問題と回答について、3つの詳細なWebサイトをスクレイプしたいと思います。次のような単純な構造になっています。

  • 2番目の深さ->メタデータを含む(問題の説明)

  • 3番目の深さ->実際のデータ(問題と回答)が含まれています

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

条件として使用して、次のようなScrapyコードを記述しresponse.meta['depth']ました。

それを行うためのより良い方法はありますか?

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 scroll -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 に答える