如何在splash中处理scrapy中的多个返回值

时间:2016-05-13 07:10:29

标签: scrapy scrapy-spider splash

我正在使用带有飞溅的scrapy,在我的飞溅中我可以发送多个值但是在我的scrapy代码中我无法处理所有。例如, 这是我的启动脚本

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

该方法从scrapy中触发启动

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内容,我无法看到数字

1 个答案:

答案 0 :(得分:1)

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

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

您还可以单独访问元素:

response.data['html'] 

response.data['number'] 

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

NOT -

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

BUT

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

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