【问题标题】:Scrapy can't return item when using yield?Scrapy在使用yield时无法返回项目?
【发布时间】:2020-06-10 18:08:21
【问题描述】:

我将尝试抽象我的代码,因为它有点大。

所以这个函数是用来解析论坛帖子的

def parse_thread_next_pages(self,response):
    print("----- Scraping new NEXT THREAD PAGE ------")
    for r in replies_body:
        #Here I'm doing some parsing and adding to 'myitem'

        if absolute_next_page_url=="javascript:;":
        #We reached the last page, myitem contains all the information I need, I want to break and return it
            break
        else:
            #This yield is used to call this function recursively for each pages
            yield scrapy.Request(absolute_next_page_url, callback=self.parse_thread_next_pages,meta={'myitem': myitem})
    return myitem

问题是,当我做scrapy crawl spider -t json -o result.json 时,它是空的。但是,如果我注释掉 yield 行,它就可以工作。但显然我没有得到预期的结果,因为这个解析函数没有被递归调用。

为什么会发生这种情况?在递归调用此函数并到达最后一页后如何返回我的项目?

【问题讨论】:

    标签: python python-3.x web-scraping scrapy web-crawler


    【解决方案1】:

    我认为您对 python generators 的工作方式感到困惑。

    您的问题的另一种选择是将最终的return 更改为yield。这不应该与你的功能冲突,Scrapy 处理它们的回调、请求和项目中的两件事。

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      相关资源
      最近更新 更多