【发布时间】:2010-09-26 19:16:25
【问题描述】:
你会如何解决这个问题?
您正在抓取博客的 HTML。博客的一些 HTML 是博客文章,一些是格式、侧边栏等。如果有的话,您希望能够分辨 HTML 中的哪些文本属于哪个文章(即永久链接)。
我知道你在想什么:你可以只看 RSS 而完全忽略 HTML!但是,RSS 通常只包含非常短的摘录或删除您可能感兴趣的链接。您想通过同时使用同一页面的 HTML 和 RSS 从本质上打败 RSS 的摘录。
RSS 条目如下所示:
标题 帖子正文摘录 永久链接HTML 中的博客文章如下所示:
标题(可能被永久链接包围) ... 永久链接,也许 ... 帖子正文 ... 固定链接,也许因此 HTML 页面包含相同的字段,但预先不知道永久链接的位置,并且这些字段将被一些主要是 HTML 和空白的噪声文本分隔,但也可能包含一些额外的元数据,例如“由约翰尼发布”或日期或类似的东西。如下所述,文本在 HTML 和 RSS 中的表示方式也可能略有不同。
其他规则/注意事项:
- 标题可能不是唯一的。这种情况发生的频率比您想象的要多。我见过的例子:“Monday roundup”、“TGIF”等。
- 标题甚至可以留空。
- RSS 中的摘录也是可选的,但假设必须至少有非空白摘录或非空白标题
- RSS 摘录可能包含完整的帖子内容,但更有可能包含帖子正文开头的简短摘录
- 假设永久链接必须是唯一的,并且在 HTML 和 RSS 中必须相同。
- 在 RSS 和 HTML 中,标题、摘录和帖子正文的格式可能略有不同。例如:
- RSS 可能在标题或正文中去除了 HTML,或者在 HTML 页面上可以添加更多 HTML(例如在文章正文的第一个字母周围加上一些东西)或格式可能略有不同
- 文本的编码可能略有不同,例如在 RSS 中为 utf8,而在 HTML 中的非 ascii 字符始终使用 & 号编码。但是,假设这是英文文本,非 ascii 字符很少见。
- 可能存在编码错误的 Windows-1252 可怕性。对于像弯引号这样的符号字符,这种情况经常发生。但是,可以安全地假设大部分文本都是 ascii。
- 可能会在任一方向上折叠大小写,尤其是在标题中。因此,他们可以在 HTML 页面中将标题全部大写,但在 RSS 中则不能。
- 假定 RSS 提要和 HTML 页面中的条目数不同。要么有更多或更少的旧条目。我们只能期望获得同时出现在两者中的那些帖子。
- RSS 可能会滞后。 HTML 页面中可能有一个新条目尚未出现在 RSS 提要中。如果 RSS 通过 Feedburner 进行联合,则可能会发生这种情况。同样,我们只能期望解决那些同时出现在 RSS 和 HTML 中的帖子。
- 帖子的正文可以很短也可以很长。
100% 准确率不是限制。但是,越准确越好。
那么,你会怎么做?
【问题讨论】:
-
很难理解前几段。编辑?
-
重写了介绍,希望它更清楚一点
标签: algorithm rss screen-scraping html-content-extraction fuzzy-search