【发布时间】:2014-03-23 14:53:33
【问题描述】:
我有 6 个管道,在 settings.py 中定义如下:
ITEM_PIPELINES = {
'SiteCrawler.pipelines.DuplicatesPipeline': 100,
#'SiteCrawler.pipelines.ScreenshotPipeline': 200,
'SiteCrawler.pipelines.NodesPipeline': 300,
'SiteCrawler.pipelines.EdgesPipeline': 400,
'SiteCrawler.pipelines.ParentsPipeline': 500,
'SiteCrawler.pipelines.TextAnalysisPipeline': 600,
}
当像这样省略屏幕截图管道时,管道以正确的顺序运行。我知道这一点,因为我会在使用每个管道时进行记录。创建订单的方法是the one suggested in the documentation。但是,当我包含屏幕截图管道时,顺序变得混乱。 1,3,4,5,6 变为 6,4,2,5,3,1。我需要它们的顺序正确。
这是 Screenshots 管道的代码,以防万一其中有任何解释:
class ScreenshotPipeline(object):
@classmethod
def from_crawler(cls, crawler):
pipeline = cls()
crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
return pipeline
def spider_opened(self, spider):
self.date = spider.unix_date
self.domain = spider.scrape_domain
self.driver = webdriver.PhantomJS(executable_path=phantomjs_path)
self.driver.set_page_load_timeout(15)
def process_item(self, item, spider):
log.msg("screenshot")
try:
self.driver.get(item['url_obj'].full)
except:
self.driver = webdriver.PhantomJS(executable_path=phantomjs_path)
self.driver.set_page_load_timeout(15)
self.driver.get(item['url_obj'].full)
WebDriverWait(self.driver, timeout=2)
self.driver.save_screenshot(r"{0}\initiator\static\scrapes\{1}\{2}\{3}.png".format(getcwd(), self.domain, self.date, item['url_obj'].name))
return item
def spider_closed(self, spider):
pass
感谢您的帮助。
【问题讨论】:
标签: python-2.7 web-scraping scrapy