これをスクレイピーで行う方法について質問があります。アイテムのリスト ページをクロールするスパイダーがあります。アイテムを含むリスティング ページが見つかるたびに、アイテム データを抽出してアイテムを生成するために呼び出される parse_item() コールバックがあります。これまでのところ、すべてがうまく機能しています。
ただし、各アイテムには、他のデータの中でも、そのアイテムの詳細を含む URL があります。その URL をたどり、別のアイテム フィールド (url_contents) に、そのアイテムの URL のフェッチされたコンテンツを格納したいと考えています。
2 つのリンク (リスト リンクと 1 つの特定のアイテム リンク) は異なるタイミングで呼び出され、コールバックが異なる方法でたどられるため、それを達成するためのコードを整理する方法がわかりませんが、同じアイテム処理でそれらを関連付ける必要があります。 .
これまでの私のコードは次のようになります。
class MySpider(CrawlSpider):
name = "example.com"
allowed_domains = ["example.com"]
start_urls = [
"http://www.example.com/?q=example",
]
rules = (
Rule(SgmlLinkExtractor(allow=('example\.com', 'start='), deny=('sort='), restrict_xpaths = '//div[@class="pagination"]'), callback='parse_item'),
Rule(SgmlLinkExtractor(allow=('item\/detail', )), follow = False),
)
def parse_item(self, response):
main_selector = HtmlXPathSelector(response)
xpath = '//h2[@class="title"]'
sub_selectors = main_selector.select(xpath)
for sel in sub_selectors:
item = ExampleItem()
l = ExampleLoader(item = item, selector = sel)
l.add_xpath('title', 'a[@title]/@title')
......
yield l.load_item()