ruby-on-rails - HTML 解析 : How to find the image in the document, 哪个被大多数文本包围?

标签 ruby-on-rails xpath html-parsing nokogiri mechanize

我正在编写一个新闻抓取工具,它必须根据新闻文章的 HTML 文档确定主图像(缩略图)。

换句话说,它基本上是相同的挑战:How does Facebook determine which images to show as thumbnails when posting a link?

有很多有用的技术(更喜欢更高的尺寸,更小的比例等),但有时在解析网页后,程序最终会得到一个类似尺寸的图像列表(其中一半是广告),它只需要选择一个,这说明了文档中描述的故事。

在视觉上,当您打开 a random news article 时,主图片几乎总是在顶部并被文字包围。我如何实现一个 HTML 解析器(例如,使用 xpath/nokogiri)来找到这样的图像?

最佳答案

除非您预先了解站点的布局,否则没有好的方法可以从代码中确定这一点。

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

您可以在页面完全加载后使用 Watir API 之一来完成此操作,但是,同样,您确实需要知道站点使用的布局。广告可以在 HTML 流中的任何位置,加载后可以在页面上移动,真实内容可以动态加载,其位置和大小可以即时更改。因此,您不能指望内容在 HTML 中的位置很重要,也不能指望内容在 HTML 中。 JavaScript 或 CSS 不是你的 friend 。

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

如果不了解页面布局,您的代码就完全受制于页面布局人员以及任何修改页面元素位置的东西。

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

关于ruby-on-rails - HTML 解析 : How to find the image in the document, 哪个被大多数文本包围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12691380/

相关文章:

xpath - 如何在 XPath 中使用一个表达式从同一节点选择两个属性?

xml - 在 xmlstarlet 上使用 xpath 检索 XML 元素的所有属性名称

javascript - 如何在 Javascript 中将 HTML 标签内的内容(仅)获取到单层?

jquery - HTML 格式不正确

ruby-on-rails - 如何在 Ruby on Rails 中将天数输出为小时数?

ruby-on-rails - 我将如何产生 Heroku 工作人员来分而治之关键字列表?

ruby - 在 Nokogiri 中使用 XPath 按属性值选择元素

java - 使用 Jsoup 获取直接从父级继承的子元素?

javascript - AJAX 请求返回 JS 而不是 HTML

sql-server - 在 MS SQL Server 2005 中使用 Rails 2.x