项目管道不在scrapy中工作

时间:2015-05-19 19:34:41

标签: python scrapy scrapy-spider

我编写了以下代码,如果用以下方式编写,我发现项目管道不起作用,process_item(在项目管道中)将不会被执行。

class Spider(scrapy.Spider):
    name = “***”
    def __init__(self, url='http://example.com/', **kw):
        super(Spider,self).__init__(**kw)
        self.url = url 
        self.allowed_domains = [re.sub(r'^www\.', '', urlparse(url).hostname)]

    def start_requests(self):
        #return [Request(self.url, callback=self.parse, dont_filter=False)]
        return [Request(self.url, callback=self.find_all_url, dont_filter=False)]

    def find_all_url(self,response):
        log.msg('current url: '+response.url, level=log.DEBUG)
        if True:
              self.parse(response)

    def parse(self, response):
        dept = deptItem()
        dept['deptName'] = response.xpath('//title/text()').extract()[0].strip()
        dept['url'] = response.url
        log.msg('find an item: '+ str(response.url) +'\n going to return item' , level = log.INFO)
        return dept        

但是,如果我将start_requests中的回调从self.find_all_url更改为self.parse(请参阅注释代码上方),项目管道有效,我会尝试找出原因,但我无法做到。 t,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

我发现如果我想以这种方式写作,我需要在函数return的{​​{1}}前面添加self.parse(response)

但我不是很清楚为什么会这样,我猜这个返回的项目应该最终回到初始请求?

答案 1 :(得分:0)

你可以发布你的设置吗?

您必须在settings.py

中定义管道
ITEM_PIPELINES = {
   'MySpider.pipelines.SomePipeline': 300,
}

基本示例:https://github.com/scrapy/dirbot