我正在探索带有飞溅的scrapy,我正试图用电子商务网站之一的productid,名称和价格来收集所有产品(裤子)数据 gap但是当我从splash web UI splash web UI看到时,我没有看到加载的所有动态产品数据(每个请求只加载了16个项目 - 没有任何线索的原因) 我尝试了以下选项,但没有运气
lua_script2 = """ function main(splash)
local num_scrolls = 10
local scroll_delay = 2.0
local scroll_to = splash:jsfunc("window.scrollTo")
local get_body_height = splash:jsfunc(
"function() {return document.body.scrollHeight;}"
)
assert(splash:go(splash.args.url))
splash:wait(splash.args.wait)
for _ = 1, num_scrolls do
scroll_to(0, get_body_height())
splash:wait(scroll_delay)
end
return splash:html()
end"""
yield SplashRequest(
url,
self.parse_product_contents,
endpoint='execute',
args={
'lua_source': lua_script2,
'wait': 5,
}
)
任何人都可以对这种行为有所了解吗? p.s:我正在使用scrapy框架,我能够从render.html解析产品信息(itemid,名称和价格)(但render.html只有16项信息)
答案 0 :(得分:2)
我将脚本更新到下面
function main(splash)
local num_scrolls = 10
local scroll_delay = 2.0
splash:set_viewport_size(1980, 8020)
local scroll_to = splash:jsfunc("window.scrollTo")
local get_body_height = splash:jsfunc(
"function() {return document.body.scrollHeight;}"
)
assert(splash:go(splash.args.url))
-- splash:set_viewport_full()
splash:wait(10)
splash:runjs("jQuery('span.icon-x').click();")
splash:wait(1)
for _ = 1, num_scrolls do
scroll_to(0, get_body_height())
splash:wait(scroll_delay)
end
splash:wait(30)
return {
png = splash:png(),
html = splash:html(),
har = splash:har()
}
end
然后在我的本地版本中运行它,png不能正常工作,但HTML有最后一个产品
唯一的问题是电子邮件订阅弹出窗口在那里它不会滚动,所以我添加了代码来关闭它