製品の Web サイトをスクレイピングする CrawlSpider を作成しています。1 ページ目から、www.domain.com/color (簡体字) の形式のカテゴリ URL を抽出します。カテゴリ ページでは、最初のリンクから製品詳細ページに移動し、製品詳細ページを解析して、次のリンクから次のページに移動します。したがって、各色カテゴリには固有のクロール パスがあります。
難点は、カラー変数が商品詳細ページにないことです。次のようにリンクを解析して、カテゴリ ページから抽出できます。
def parse_item(self, response):
l = XPathItemLoader(item=Greenhouse(), response=response)
l.default_output_processor = Join()
l.add_value('color', response.url.split("/")[-1])
return l.load_item()
ただし、この色の値を、特定のカラー カテゴリ ページからクロールされた製品の製品詳細ページから解析されたアイテムに追加したいと考えています。製品の URL は次のリンクをたどることによってクロールされるため、最初のリンクの後に参照カテゴリ ページが失われます。Scrapy ドキュメントには、パーサー間でデータを渡すことができる request.meta に関する記述がありますが、これがここに当てはまるかどうかはわかりません。どんな助けでも大歓迎です。
私のルールは次のとおりです。
Rule(SgmlLinkExtractor(restrict_xpaths=('//table[@id="ctl18_ctlFacetList_dlFacetList"]/tr[2]/td',)),),
Rule(SgmlLinkExtractor(restrict_xpaths=('//table[@id="ctl18_dlProductList"]/tr[1]/td[@class="ProductListItem"][1]',)),callback='parse_item', follow=True,),
Rule(SgmlLinkExtractor(restrict_xpaths=('//a[@id="ctl18_ctl00_lbNext"]',)),callback='parse_item', follow=True, ),