我正在使用scrapy with splash,在我的splash中我可以发送多个值,但是在我的scrapy代码中我无法处理全部。例如,
这是我的启动脚本

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

该方法触发刮擦飞溅
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内容,我看不到数字

最佳答案

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

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

您还可以单独访问元素:

response.data['html']

要么
response.data['number']

当您返回内容时,请确保在return语句中进行分配:

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


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

基本上,即使您可能在外部,也必须在return语句中分配JSON密钥。
额外的信息,但那确实使我烦恼,您可能会遇到相同的问题。

关于scrapy - 如何处理飞溅中的多个返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37203458/

10-10 14:10
查看更多