我正在使用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/