我正在做一个刮的练习,并试图刮海报从一个网站使用Nokogiri。
这是我想要得到的链接:https://a.ltrbxd.com/resized/film-poster/5/8/6/7/2/3/586723-glass-onion-a-knives-out-mystery-0-460-0-690-crop.jpg?v=ce7ed2a83f
但我得到了这个:https://s.ltrbxd.com/static/img/empty-poster-500.825678f0.png
为什么?
我是这么试的:
url = "https://letterboxd.com/film/glass-onion-a-knives-out-mystery/"
serialized_html = URI.open(url).read
html = Nokogiri::HTML.parse(serialized_html)
title = html.search('.headline-1').text.strip
overview = html.search('.truncate p').text.strip
poster = html.search('.film-poster img').attribute('src').value
{
title: title,
overview: overview,
poster_url: poster,
}
2条答案
按热度按时间rkue9o1l1#
这和你的ruby代码无关。
如果你在你的终端里运行
你可以看到输出的HTML没有你要找的图像,你可以在浏览器中看到,因为在初始加载之后,一些javascript运行并加载了更多的资源。
加载您要查找的图像的 AJAX 调用是https://letterboxd.com/ajax/poster/film/glass-onion-a-knives-out-mystery/std/500x750/?k=0c10a16c
玩你的浏览器的网络检查器,你将能够识别网站的不同部分,以及每个部分是如何加载的。
v8wbuo2f2#
Nokogiri不执行Javascript,但是链接必须在那里,或者至少必须有一个到返回链接的某个API的链接。
我首先要搜索的是图像元素或其父元素的数据属性,但在本例中,它与其他一些关于电影的有趣数据沿着隐藏在内联脚本中。
首先使用
curl
或wget
下载网页,并在文本编辑器中打开文件,看看Nokogiri看到了什么。搜索一些你知道的文件,我搜索了图片URL的ce7ed2a83f
部分,并找到了JSON。然后,可以如下提取数据: