如果返回列表,如何从 splash 中检索?
How to retrieve from splash if a list was returned?
按照此处启动源中提供的示例:https://github.com/scrapinghub/splash/blob/master/splash/examples/render-multiple.lua
在那个 lua 脚本中,lua table 被 return 编辑而不是 json 对象。
如何在使用 scrapy-splash 时 return 和检索 array/list 而不是 table/dictionary 与 lua 脚本?
如果您使用的是 scrapy-splash,则解码结果可用 response.data(参见 https://github.com/scrapy-plugins/scrapy-splash#responses)。你应该做这样的事情来访问 google.com:
的 PNG 数据
import base64
# ...
def parse_result(self, response):
img = base64.b64decode(response.data["www.google.com"])
# ...
链接脚本 return 是一个 {"<url>": "<base64 png data>"}
映射,而不是数组。
如果你想 return 一个数组,修改脚本以使用整数键和 treat.as_array:
treat = require('treat')
function main(splash, args)
splash.set_viewport_size(800, 600)
splash.set_user_agent('Splash bot')
local example_urls = {"www.google.com", "www.bbc.co.uk", "scrapinghub.com"}
local urls = args.urls or example_urls
local results = {}
for i, url in ipairs(urls) do
local ok, reason = splash:go("http://" .. url)
if ok then
splash:wait(0.2)
results[i] = splash:png()
end
end
return treat.as_array(results)
end
然后您可以像这样访问数据:
import base64
# ...
def parse_result(self, response):
img = base64.b64decode(response.data[0])
# ...
按照此处启动源中提供的示例:https://github.com/scrapinghub/splash/blob/master/splash/examples/render-multiple.lua
在那个 lua 脚本中,lua table 被 return 编辑而不是 json 对象。
如何在使用 scrapy-splash 时 return 和检索 array/list 而不是 table/dictionary 与 lua 脚本?
如果您使用的是 scrapy-splash,则解码结果可用 response.data(参见 https://github.com/scrapy-plugins/scrapy-splash#responses)。你应该做这样的事情来访问 google.com:
的 PNG 数据import base64
# ...
def parse_result(self, response):
img = base64.b64decode(response.data["www.google.com"])
# ...
链接脚本 return 是一个 {"<url>": "<base64 png data>"}
映射,而不是数组。
如果你想 return 一个数组,修改脚本以使用整数键和 treat.as_array:
treat = require('treat')
function main(splash, args)
splash.set_viewport_size(800, 600)
splash.set_user_agent('Splash bot')
local example_urls = {"www.google.com", "www.bbc.co.uk", "scrapinghub.com"}
local urls = args.urls or example_urls
local results = {}
for i, url in ipairs(urls) do
local ok, reason = splash:go("http://" .. url)
if ok then
splash:wait(0.2)
results[i] = splash:png()
end
end
return treat.as_array(results)
end
然后您可以像这样访问数据:
import base64
# ...
def parse_result(self, response):
img = base64.b64decode(response.data[0])
# ...