這兩種方法都很常見,這只是一個偏好問題。對於包含一個蜘蛛中所有內容的情況,聽起來像是一個簡單的解決方案。
可以URL字段添加到您的項目和計劃,並在管道後對其進行分析:
class MyPipeline(object):
def __init__(self, crawler):
self.crawler = crawler
@classmethod
def from_crawler(cls, crawler):
return cls(crawler)
def process_item(self, item, spider):
extra_url = item.get('extra_url', None)
if not extra_url:
return item
req = Request(url=extra_url
callback=self.custom_callback,
meta={'item': item},)
self.crawler.engine.crawl(req, spider)
# you have to drop the item here since you will return it later anyway
raise DropItem()
def custom_callback(self, response):
# retrieve your item
item = response.mete['item']
# do something to add to item
item['some_extra_stuff'] = ...
del item['extra_url']
yield item
什麼上面的代碼的作用是檢查項目是否有一定的URL字段中,如果這樣做,下降的項目並安排新的請求。該請求用一些額外數據填充該項目並將其發送回管道。
謝謝你的例子。我以前從未見過這種方法。 – user61629
我有一個後續問題。 http://stackoverflow.com/questions/42515747/initializing-pipeline-object-with-crawler-in-scrapy – user61629
我會在這裏給你一個賞金給你的幫助。再次感謝。 – user61629