我正在使用带有飞溅的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内容,我无法看到数字
答案 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键,即使你可能在外面这样做了。 额外的信息,但这真的搞砸了我,你可能会遇到同样的问题。