1

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

换句话说,这基本上是相同的挑战:Facebook 如何确定在发布链接时将哪些图像显示为缩略图?

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

从视觉上看,当你打开一篇随机的新闻文章时,主图片几乎总是在顶部并被文字包围。如何实现一个 HTML 解析器(例如,使用 xpath / nokogiri)来找到这样的图像?

4

2 回答 2

1

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

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

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

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

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

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

于 2012-10-03T00:42:30.527 回答
0

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

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

您可以通过阅读图像 URL(图像标签的 src 属性)并检查主机与文章主机的中间部分(在您的示例中为“nytimes”)应该是相同的。

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

希望这可以帮助

于 2012-10-02T14:00:31.007 回答