いくつかの問題と回答について、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です。
- 追加:scrapy.confから設定をインポートsettings.overrides ['DEPTH_LIMIT']=2スパイダーファイルに
- -sオプションを指定してコマンドラインを実行する:/ usr / bin / scrapy scroll -s DEPTH_LIMIT = 2 mininova.org
- settings.pyとscrapy.cfgに追加:DEPTH_LIMIT = 2
1つ以上に構成するにはどうすればよいですか?