【发布时间】:2018-02-13 23:05:05
【问题描述】:
我只是在用 splash 探索 scrapy,我正试图从一个电子商务网站上用 productid、name 和 price 抓取所有产品(裤子)数据 gap 但是当我从splash web UI splash web UI 看到时,我没有看到加载的所有动态产品数据(虽然每个请求只加载了16 个项目 - 不知道为什么) 我尝试了以下选项,但没有运气
- 将等待时间增加到 20 秒
- 通过使用“--disable-private-mode”启动 docker
- 通过使用lua_script进行页面滚动
- 带有查看报告完整选项splash:set_viewport_full()
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解析产品信息(商品名称、名称和价格)(但render.html只有16个商品信息)
【问题讨论】:
-
用api直接获取数据怎么样,不用那么费劲? "gap.com/resources/productSearch/v1/search?cid=80799"
-
嗨塔伦,感谢您的回复。但我的目标是爬入网站上列出的每个产品(例如这里的每条裤子)并获取所有可用的 skus(例如,这条裤子有近 23 种尺寸(skus),我可以从 view-source link 看到我没有通过api找到。我是新的这个api方法。你能提供一些信息
-
我曾尝试使用 splash:set_viewport_full() 但没有运气并尝试使用 scrpay 也喜欢 yield SplashRequest(url, self.parse_product_contents, args={' wait': 10, 'viewport':'full' , 'render_all': 1},endpoint='render.html' ) 仍然没有运气但是当我将视图报告大小设置为大尺寸
splash:set_viewport_size(1980, 8020)我看到内容已加载,但仍有限制。当我尝试增加 pngViewport is out of range (20000x20000, area=16000000)的维度时出现此错误 -
@TarunLalwani 你有什么想法吗,请分享
标签: python-3.x scrapy scrapy-splash