Scrapy在产生请求后未返回

1 投票
1 回答
1174 浏览
提问于 2025-04-18 07:38

跟这里的那个人一样:Scrapy没有通过请求回调返回从抓取链接中获取的额外信息,我在访问我在回调函数中创建的项目列表时遇到了困难。我尝试过在解析函数中构建这个列表(但不行,因为回调还没返回),也在回调中尝试过,但都没有成功。

我想返回我从这些请求中构建的所有项目。我应该在哪里调用“return items”,才能确保项目已经完全处理完?我想复制这个教程的内容(http://doc.scrapy.org/en/latest/intro/tutorial.html#using-our-item

相关的代码如下:

class ASpider(Spider):
    items = []
...
  def parse(self, response):
      input_file = csv.DictReader(open("AFile.txt"))
      x = 0
      for row in input_file:
          yield  Request("ARequest", 
          cookies = {"arg1":"1", "arg2":row["arg2"], "style":"default", "arg3":row["arg3"]}, callback = self.aftersubmit, dont_filter = True)

  def aftersubmit(self, response):
    hxs = Selector(response)
    # Create new object..
    item = AnItem()
    item['Name'] = "jsc"
    return item

1 个回答

1

你需要在 aftersubmit 回调方法中 return(或者 yield)一个项目。引用自 文档

在回调函数中,你需要解析响应(网页),然后返回 Item 对象、Request 对象,或者两者的可迭代集合。

def aftersubmit(self, response):
    hxs = Selector(response)

    item = AnItem()
    item['Name'] = "jsc"
    return item

请注意,这个特定的 Item 实例没有意义,因为你并没有把响应中的任何内容放到它的字段里。

撰写回答