来自TripAdvisor的动态加载图像

时间:2016-12-27 07:49:56

标签: scrapy web-crawler scrapy-spider jquery-lazyload scrapy-splash

我正试图从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。

有没有人有这样的问题,或者知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

滚动到图像时,图像似乎已加载。但是,当我尝试使用Splash滚动到它们时,尽管设置了延迟,我还是无法渲染图像。

如果查看响应正文,您会注意到图像包含在名为lazyImgs的JavaScript数组中,并且每个图像都有一个ID。遍历评论时,您可以从占位符元素中读取每个ID,并使用它们从JavaScript数组中检索图像。这可能是最简单的解决方案。