如何处理来自 splash 的 scrapy 中的多个 return 值

how to handle multiple return values in scrapy from splash

我正在使用带有 splash 的 scrapy,在我的 splash 中我可以发送多个值但是在我的 scrapy 代码中我无法处理 all.for 示例, 这是我的启动脚本

splash_script = """
    function main(splash)
      local url = splash.args.url
      return {
        html = splash:html(),
        number = 1
      }
    end
    """

方法从scrapy触发splash

yield scrapy.Request(
              url= response.urljoin(url),
              callback = self.product_details,
              errback=self.error,
              dont_filter=True,
              meta = {
                'splash':{
                  'endpoint': 'render.html',
                  'cache_args': ['lua_source'],
                  'args' :{
                     'index': index,
                     'http_method':'GET',
                     'lua_source': self.splash_script,
                   }
               }
          },
        )

回调方法

def product_details(self,response):
    print response.body

此方法仅接收 html 内容,我看不到 number

您正在打印 response.body。这仅包括 html。

您必须使用 response.data 才能看到 1。

您也可以单独访问元素:

response.data['html'] 

response.data['number'] 

当你 return 东西时,确保你在 return 语句中分配它:

不-

html = splash:html()
number = 1
return {number,html}

但是

return {number = 1, html = splash:html()}

基本上,您必须在 return 语句中分配 JSON 键,即使您可能已经在外部这样做了。 额外的信息,但这真的把我搞砸了,你可能 运行 遇到同样的问题。