Ruby:如何获得一篇文章';s主图像或链接预览是如何工作的?
我试图了解链接预览是如何工作的(例如,在Facebook或Reddit等网站上,在发布链接时预览文章的图像及其标题):如何在不知道其确切图像url的情况下获取文章的“主”图像 例如,在这个我的链接预览应该向我显示这个(主)图像,而不是例如(这是一个图像进一步向下) 我是一个ruby新手,但我能够用Nokogiri获得所有图像,并用这段代码打开Uri(但是问题仍然存在:我如何只获得主图像?)Ruby:如何获得一篇文章';s主图像或链接预览是如何工作的?,ruby,parsing,Ruby,Parsing,我试图了解链接预览是如何工作的(例如,在Facebook或Reddit等网站上,在发布链接时预览文章的图像及其标题):如何在不知道其确切图像url的情况下获取文章的“主”图像 例如,在这个我的链接预览应该向我显示这个(主)图像,而不是例如(这是一个图像进一步向下) 我是一个ruby新手,但我能够用Nokogiri获得所有图像,并用这段代码打开Uri(但是问题仍然存在:我如何只获得主图像?) 这是您的代码的一个稍加修改的版本。它为提供的链接工作良好,你将不得不适应它为其他网站 它使用w=后跟大于3
这是您的代码的一个稍加修改的版本。它为提供的链接工作良好,你将不得不适应它为其他网站 它使用
w=
后跟大于300的数字来解析图像URL的代码
它下载第一个找到的图像,可能具有更高的分辨率(所需的\u width=800
)
对于给定的示例:
Found 2330.jpg !
试试这个,你不能写一个程序来理解你对“主图像”的意思。您是否总是访问同一页面(在您的示例中为theguardian)?然后您必须检查页面源代码(希望不会太快更改),并找到一个定义css类/选择器。@Felix:我想访问不同的页面,所以我想这是一个相当困难的任务。我知道有很多优秀的ruby宝石,例如,它们工作得很好,但我想了解它们是如何做到的(例如,它们是否只解析第一个大于宽度/高度阈值的图像等?)
URL = 'https://www.theguardian.com/technology/2016/dec/12/facebook-2016-problems-fake-news-censorship'.freeze
require 'open-uri'
require 'nokogiri'
minimum_width = 300
desired_width = 800
width_regex = /(w=)(\d+)/
Nokogiri::HTML(open(URL)).xpath('//img/@src').find do |src|
basename = File.basename(src)
next unless basename =~ width_regex &&
Regexp.last_match(2).to_i >= minimum_width
without_parameters = basename.split('?').first
puts "Found #{without_parameters} !"
uri = URI.join(URL, src.to_s.sub(width_regex, '\1' + desired_width.to_s))
File.open(without_parameters, 'wb') do |f|
f.write(open(uri).read)
end
end
Found 2330.jpg !