我正试图从TripAdvisor网站上搜索评论。由于网站中的大多数图像都是动态加载的,因此我使用Splash javascript呈现服务来生成页面。
问题是某些图像已加载,有些则未加载。
以下是我要抓取的评论的网址: https://www.tripadvisor.com.sg/ShowUserReviews-g294265-d1770798-r446535418-Marina_Bay_Sands-Singapore.html
我尝试将Splash等待时间设置为10秒(最大值),结果仍然相同。
这是我在Splash中使用的代码:
function main(splash)
local url = splash.args.url
assert(splash:go(url))
assert(splash:wait(10))
splash:set_viewport_full()
return {
html = splash:html(),
png = splash:png(),
har = splash:har(),
}
end
这是Splash(Croped out footer section)生成的结果图像:Click to view the image
如您所见,除了审阅中的图像外,所有其他动态加载图像都已加载(它们应位于红色矩形中)。我检查了html并发现img标签已经存在,但是他们的src属性是“... / x.gif”,它是一个像素图像,而不是实际图像的URL。
有没有人有这样的问题,或者知道为什么会这样?
答案 0 :(得分:0)
滚动到图像时,图像似乎已加载。但是,当我尝试使用Splash滚动到它们时,尽管设置了延迟,我还是无法渲染图像。
如果查看响应正文,您会注意到图像包含在名为lazyImgs
的JavaScript数组中,并且每个图像都有一个ID。遍历评论时,您可以从占位符元素中读取每个ID,并使用它们从JavaScript数组中检索图像。这可能是最简单的解决方案。