你将如何解决这个问题?
您正在抓取博客的 HTML。博客的一些 HTML 是博客文章,一些是格式、侧边栏等。如果有的话,您希望能够分辨 HTML 中的哪些文本属于哪个文章(即永久链接)。
我知道你在想什么:你可以只看 RSS 而完全忽略 HTML!但是,RSS 通常只包含非常短的摘录或删除您可能感兴趣的链接。您希望通过同时使用同一页面的 HTML 和 RSS 从本质上打败 RSS 的摘录。
RSS 条目如下所示:
标题 帖子正文摘录 永久链接
HTML 格式的博客文章如下所示:
标题(可能被永久链接包围) ... 永久链接,也许 ... 帖子正文 ... 永久链接,也许
因此 HTML 页面包含相同的字段,但预先不知道永久链接的位置,并且这些字段将被一些主要是 HTML 和空白的噪声文本分隔,但也可能包含一些额外的元数据,例如“由 Johnny 发布"或日期或类似的东西。如下所述,文本在 HTML 和 RSS 中也可能略有不同。
附加规则/注意事项:
- 标题可能不是唯一的。这种情况发生的频率比您想象的要多。我见过的例子:“周一综述”、“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% 准确率不是限制。但是,越准确越好。
嗯,你会怎么做?