【问题标题】:item pipeline not working in scrapy项目管道在scrapy中不起作用
【发布时间】:2015-11-25 08:01:40
【问题描述】:

我写了下面的代码,我发现如果我按照下面的方式写的话item pipeline 不会工作,process_item (in item pipeline) 不会被执行。

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(参见上面的注释代码),项目管道可以工作,我试图找出原因,但我找不到,有人可以帮忙吗?

【问题讨论】:

    标签: python scrapy scrapy-spider


    【解决方案1】:

    发现如果要这样写,需要在函数find_all_urlself.parse(response)前面加上return

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

    【讨论】:

      【解决方案2】:

      您可以发布您的设置吗?

      您必须在 settings.py 中定义管道

      ITEM_PIPELINES = {
         'MySpider.pipelines.SomePipeline': 300,
      }
      

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

      【讨论】:

      • 为什么要回答问题?
      • 这并不意味着您必须回答。
      • 我只是想帮助你。我想我能做到。但是,如果您愿意,您可以对答案投反对票并忘记它
      • 哦,不要试图误导谈话。作为审稿人,我收到了你的问题。你想帮忙,这是件好事,我真的很感激,但你不能做你不被允许的事情。好的? @Zartch
      • 好的,为我的回答道歉。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      相关资源
      最近更新 更多