可靠的剪裁网页内容的方法是什么?

3

我想知道如何(或多或少)可靠地从随机网站剪辑内容(使用Ruby或JavaScript都可以)。

就像Evernote和Flipboard一样。

确定实际内容在页面上的位置的最佳方法是什么?

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

例如:

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

谢谢。


我认为这是一个很好的问题;我也很想了解这个。我在这里发表评论,以便我可以找到这个问题,如果有人回答它。 - fsong
你能详细说明一下“clip”的含义吗?这是指在页面上进行数据挖掘,还是尝试将其呈现为图像? - Alex Smith
通过剪辑,我指的是提取页面的实际内容。无论是HTML还是图像 - 这是另一个问题。问题是如何找到实际内容所在的位置。 - Dmytrii Nagirniak
1个回答

2
我的初始想法是使用DOM解析页面,然后遍历DOM树到特定
的内容,并显示出来(通过XPath等方式)。对于没有明确定义部分的页面,无论使用哪种方法都会很困难。Firefox和Chrome的AutoPager插件实现了XPath解析行为。获取最新版本并打开.xpi文件,看看他是如何实现的。这是一个JavaScript实现。
让某人输入URL/站点方案,以此选择
,即内容
的id或class是什么。对于你的ninemsn示例,包含文章标题、分享按钮、作者图像和帖子内容的
是:
<div class="post">

"实际的文本内容为:"
<div class="postBody txtWrap" section="txt">

所以有人会输入需要从<div class="post">中解析第一个h1,那就是文章标题,然后获取所有来自<div class="postBody">的文本,并将其作为文章内容(您可能需要以这种方式解析类,以便它可以匹配postBodytxtWrap)。

另一个例子(仅供娱乐):Stack Overflow。 一个问题的标题包含在

<div id="question-header">

一个问题的文本更加棘手,因为它在一个与答案文本相同的class的
中,并且没有id。你需要匹配
,然后向下遍历。
<div class="post-text">

同样地,对于答案,每个<div id="answer-[UINTEGER]">都包含一个带有相应文本的<div class="post-text">
在这两种情况下,您可以遍历那些顶级的questionanswer- div,以获取用户名、声望和徽章计数等信息的<div class="user-details">

你如何确定必要的CSS/XPath选择器以适用于大多数网站?硬编码每个选择器对我来说不是一个好的选择。 - Dmytrii Nagirniak
对了,感谢提供AutoPager链接。 - Dmytrii Nagirniak
由于HTML标准的松散性,几乎没有可靠的方法来做到这一点。这就是为什么AutoPager有一个用户提交配置的库,适用于特定网站。不幸的是,这方面没有好的答案。你可以从查找postbodycontentmain作为divp块的idclass开始。你可以建立一个类似于AutoPager的系统,即"已知"的配置,如果一个配置未知,你可以让用户添加它,然后你审核新的配置,或者只是提示该网站还不支持。 - user244343

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接