提问人:Ibraheem Ahmed 提问时间:11/10/2019 最后编辑:Ibraheem Ahmed 更新时间:11/2/2020 访问量:111
如何在 Nokogiri 中解析图像 href
How to parse the image href in Nokogiri
问:
我正在使用 Nokogiri 解析网页,并想解析出图像 URL。这是我的设置:
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('https://themeforest.net/search?sort=sales'))
如果我在 chrome 上检查页面,我可以看到以下代码块:
<div class="_2_3rp " style="padding-top:50.847457627118644%">
<div style="">
<img class="_1xvs1" src="https://themeforest.img.customer.envatousercontent.com/files/274559780/screenshots/00-Preview.jpg?auto=compress%2Cformat&fit=crop&crop=top&w=590&h=300&s=37354d884fd0f3b574238e013b4ea423"
title="Avada | Responsive Multi-Purpose Theme"
alt="Avada | Responsive Multi-Purpose Theme" style="left: 0%;">
</div>
</div>
但是,当我运行时:
puts doc.search("//div[@class = '_2_3rp ']")
我得到以下信息:
<div class="_2_3rp " style="padding-top:50.847457627118644%"><div style="height:100%" class="lazyload-placeholder"></div></div>
<div class="_2_3rp " style="padding-top:50.847457627118644%"><div style="height:100%" class="lazyload-placeholder"></div></div>
.....
=> nil
为什么我没有得到课程,而是得到了?有什么方法可以克服这个问题,并摆脱图像占位符?img
lazyload-placeholder
答:
-1赞
the Tin Man
11/10/2019
#1
以下是我想出的最小代码,用于测试您的断言:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<div class="12345">
<div>
<img class="67890" src="https://foo.bar">
</div>
</div>
EOT
doc.search('//div[@class=12345]').map(&:to_html)
# => ["<div class=\"12345\">\n" +
# " <div>\n" +
# " <img class=\"67890\" src=\"https://foo.bar\">\n" +
# " </div>\n" +
# "</div>"]
# "</div>"]
看起来标签就在那里。img
你正在用它来解析。不要,因为会发生严格的解析,而对于 HTML,这绝不是严格的,如果 HTML 格式不正确,可能会出现问题。Nokogiri::XML
评论
0赞
Ibraheem Ahmed
11/11/2019
解析返回相同的结果Nokogiri::HTML
评论
div
style