【问题标题】:What is reliable way to clip *content* of a web page?剪辑网页*内容*的可靠方法是什么?
【发布时间】:2011-09-12 00:30:01
【问题描述】:

我想知道如何(或多或少)可靠地剪辑随机网站的内容(使用 Ruby 或 JavaScript,并不重要)。

很像 Evernote 和 Flipboard。

确定实际内容在页面中的何处的最佳方法是什么?

目的:给定一个 URL - 检索该页面的实际内容并忽略所有布局和其他不相关信息

例如:

只需使用 Evernote 的“剪辑整页”选项即可准确了解我的意思。

谢谢。

【问题讨论】:

  • 我认为这是一个很好的问题;我也有兴趣了解这一点。我将在此处作为书签发布评论,以便稍后如果有人回答,我可以找到此问题。
  • 您能详细说明“剪辑”是什么意思吗?这是否意味着对页面上的 HTML 进行数据挖掘,或者您是否尝试将其呈现为图像?
  • 剪切是指提取页面的实际内容。无论是 HTML 还是图像 - 这是另一个问题。问题是如何找到实际内容的位置。

标签: javascript html ruby web


【解决方案1】:

我最初的想法是对页面进行 DOM 解析,然后遍历 DOM 树到特定 div 的内容并显示(通过 XPath 等)。对于没有明确定义部分的页面,无论您使用哪种方法,都会很困难。 Firefox 和 Chrome 的 AutoPager 插件实现了 XPath 解析行为。获取最新版本并打开.xpi 看看他是如何做到的。这是一个 JavaScript 实现。

通过让某人根据 URL/站点方案输入内容 dividclass 来选择 div。对于您的 Ninemsn 示例,包含文章标题、分享按钮、作者图片和帖子内容的 div 是

<div class="post">

文本的实际正文是

<div class="postBody txtWrap" section="txt">

所以有人会输入你需要从&lt;div class="post"&gt; 解析第一个h1,这就是文章标题,然后从&lt;div class="postBody"&gt; 获取所有文本并使其成为文章内容(您可能需要解析类,使其可以匹配 postBodytxtWrap)。

另一个例子(有趣的):堆栈溢出。问题的标题包含在

<div id="question-header">

问题的文本比较复杂,因为它在 div 中,class 与答案文本相同,而没有 id。需要匹配&lt;div id="question"&gt;,然后向下遍历到

<div class="post-text">

对于答案,每个&lt;div id="answer-[UINTEGER]"&gt; 都包含一个&lt;div class="post-text"&gt; 及其各自的文本。

在这两种情况下,您都可以遍历那些顶级 questionanswer- div 以获取 &lt;div class="user-details"&gt; 以获取用户名、声誉和徽章计数等。

【讨论】:

  • 您如何确定必要的 CSS/XPath 选择器以用于大多数网站?对它们中的每一个进行硬编码对我来说都不好看。
  • 是的。感谢 AutoPager 链接。
  • 由于HTML 标准非常松散,几乎没有可靠的方法来做到这一点。这就是为什么 AutoPager 有一个用户提交的配置存储库,这些配置适用于特定的网站。不幸的是,对此没有好的答案。您可以首先查找postbodycontentmain 作为idclassdivp 块。您可以设置一个与 AutoPager 类似的系统,其中配置是“已知的”,如果不知道,您可以让用户添加它,然后验证新配置,或者只显示一条消息,表明该站点不是还支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
  • 2018-02-04
  • 2010-11-14
  • 2016-03-10
  • 2019-06-07
  • 2013-10-05
  • 1970-01-01
相关资源
最近更新 更多