我只想使用启动脚本并仅返回工作列表的网址



我正在使用scrapy和splash来抓取这个网站,出于某些原因,我正在使用splash和scrapy,即使我知道我可以抓取它的API。我的问题是我只希望我的lua脚本只返回工作列表的urls而不是整个splash:html()页面,我一直在尝试这样做,但我收到以下错误消息:-

{
"error": 400,
"description": "Error happened while executing Lua script",
"type": "ScriptError",
"info": {
"message": "Lua error: /app/splash/lua_modules/libs/treat.lua:45: cannot change a protected metatable",
"type": "LUA_ERROR"
}
}

我一直使用的lua脚本也如下所示:-

function main(splash, args)
assert(splash:go(args.url))
splash:wait(5.0)
local treat = require('treat')
listings = assert(splash:select_all("ul.job_listings > li> a"))
return {
listing_urls = treat.as_array(listings)
}
end
function treat.as_array(tbl)
-- the same function is available in
-- Splash Python code as lua._mark_table_as_array
if type(tbl) ~= 'table' or wraputils.is_wrapped(tbl) then
error('as_array argument must be a table', 2)
end
setmetatable(tbl, {__metatable="array"})
return tbl
end

treat.as_array尝试更改其参数的元表。

导致此错误的原因是listings元表设置了__metatable字段。

从 https://www.lua.org/manual/5.3/manual.html#pdf-setmetatable

如果原始元表具有__metatable字段,则会引发错误。

相关内容

  • 没有找到相关文章