Ruby on rails HTML解析:如何在文档中找到被大多数文本包围的图像?

Ruby on rails HTML解析:如何在文档中找到被大多数文本包围的图像?,ruby-on-rails,xpath,html-parsing,nokogiri,mechanize,Ruby On Rails,Xpath,Html Parsing,Nokogiri,Mechanize,我正在写一个新闻刮板,它必须确定一个新闻文章的HTML文档的主图像(缩略图) 换句话说,这基本上是相同的挑战: 有许多有用的技术(倾向于更高的维度、更小的比率等),但有时在解析网页后,程序最终会得到一个类似大小的图像列表(其中一半是广告),它只需要选择一个,这说明了文档中描述的故事 从视觉上看,当您打开时,主图片几乎总是位于顶部,并被文本包围。如何实现HTML解析器(例如,使用xpath/nokogiri)来查找这样的图像?如果我理解正确,那么问题不在于解析页面,而在于实现成功决定选择哪个图像的

我正在写一个新闻刮板,它必须确定一个新闻文章的HTML文档的主图像(缩略图)

换句话说,这基本上是相同的挑战:

有许多有用的技术(倾向于更高的维度、更小的比率等),但有时在解析网页后,程序最终会得到一个类似大小的图像列表(其中一半是广告),它只需要选择一个,这说明了文档中描述的故事


从视觉上看,当您打开时,主图片几乎总是位于顶部,并被文本包围。如何实现HTML解析器(例如,使用xpath/nokogiri)来查找这样的图像?

如果我理解正确,那么问题不在于解析页面,而在于实现成功决定选择哪个图像的逻辑

我认为第一步是决定哪些图片是新闻图片,哪些不是(例如广告)

通过读取图像URL(图像标记的src attibute)并对照文章主机检查th主机,您可以发现中间部分(示例中的“nytimes”)应该是相同的

第二步是决定哪一个是最重要的。为此,你们可以在文章中使用图片大小,在页面上的位置,等等。对于第二步,你们必须尝试什么对大多数网站最有效。调整你的算法,直到它为大多数新闻网站产生最好的结果


希望这有帮助

如果我理解正确,您的问题不在于解析页面,而在于实现成功决定选择哪个图像的逻辑

我认为第一步是决定哪些图片是新闻图片,哪些不是(例如广告)

通过读取图像URL(图像标记的src attibute)并对照文章主机检查th主机,您可以发现中间部分(示例中的“nytimes”)应该是相同的

第二步是决定哪一个是最重要的。为此,你们可以在文章中使用图片大小,在页面上的位置,等等。对于第二步,你们必须尝试什么对大多数网站最有效。调整你的算法,直到它为大多数新闻网站产生最好的结果


希望这对你有所帮助,除非你事先知道网站的布局,否则没有好的方法可以从代码中判断

HTML和DHTML允许您使用CSS或JavaScript在整个页面上定位元素,并且可以在页面加载后进行定位,这是Nokogiri无法访问的

在页面完全加载后,您可能可以使用一个watirapi来完成这项工作,但是,您确实需要知道站点使用的布局。广告可以在HTML流中的任何位置,并在加载后在页面上移动,真实内容可以动态加载,其位置和大小可以动态更改。因此,您不能指望内容在HTML中的位置是重要的,也不能指望内容在HTML中是重要的。JavaScript或CSS在这方面不是你的朋友

当我为网站分析编写爬行器和爬虫程序时,我不得不处理同样的问题。因为我知道我将要查看哪些站点,所以我会进行快速预扫描,找到我的地标标记,然后为这些标记编写一些CSS或XPath访问器。将这些URL保存在数据库中,您可以快速浏览页面,准确地获取所需内容

如果不了解页面布局,您的代码完全取决于页面布局人员,以及任何修改页面元素位置的操作


基本上,您需要在代码中实现大脑中的wet ware,以及以图形方式呈现页面的功能,以便您的代码能够对其进行分析。当您作为用户在浏览器中查看页面时,您使用的是视觉和上下文线索来定位重要内容。所有这些上下文信息都是缺少的内容和您需要编写的内容

除非您事先了解站点的布局,否则无法从代码中确定这一点

HTML和DHTML允许您使用CSS或JavaScript在整个页面上定位元素,并且可以在页面加载后进行定位,这是Nokogiri无法访问的

在页面完全加载后,您可能可以使用一个watirapi来完成这项工作,但是,您确实需要知道站点使用的布局。广告可以在HTML流中的任何位置,并在加载后在页面上移动,真实内容可以动态加载,其位置和大小可以动态更改。因此,您不能指望内容在HTML中的位置是重要的,也不能指望内容在HTML中是重要的。JavaScript或CSS在这方面不是你的朋友

当我为网站分析编写爬行器和爬虫程序时,我不得不处理同样的问题。因为我知道我将要查看哪些站点,所以我会进行快速预扫描,找到我的地标标记,然后为这些标记编写一些CSS或XPath访问器。将这些URL保存在数据库中,您可以快速浏览页面,准确地获取所需内容

如果不了解页面布局,您的代码完全取决于页面布局人员,以及任何修改页面元素位置的操作


基本上,您需要在代码中实现大脑中的wet ware,以及以图形方式呈现页面的功能,以便您的代码能够对其进行分析。当您作为用户在浏览器中查看页面时,您使用的是视觉和上下文线索来定位重要内容。所有这些上下文信息都是缺少的内容和您需要编写的内容

算法“选择最大图像”的效果如何?算法“选择最大图像”的效果如何?