如何猜测HTML文档的真实标题?

时间:2011-02-16 15:27:33

标签: javascript html title

很多人在他们的<title>标签中添加了极其无用且烦人的东西,而我正试图想出只提取有趣部分的Javascript代码。

例如,在Google搜索中,您会获得此文档标题:
some random search - Google Search
“Google搜索”部分是多余的,因为您已经在域名(和favicon)中拥有此信息。在这个例子中,我想要这个部分:
some random search

大多数网站的作者可能会使用“破折号”,如下所示:
Site name - Title
Title - Site name
但如果这很容易,我不会在这里问。 ;)

还有一些非常烦人的情况,标题根本不在<title>标签中。 (讽刺的是哦!)只要看看纽约时报的这个页面:Egypt’s Autocrats Exploited Internet’s Weaknesses - NYTimes.com。鉴于文章的标题实际上是:Egypt Leaders Found ‘Off’ Switch for Internet。什么是f ***,纽约时报?

在假设我们可以访问页面的DOM的情况下,提取此信息的最可靠方法是什么?我认为一个好的起点是<h1>标签,但它不可靠。我想有很多作者根本不使用它或多次使用它。

更新:<title><h1>内容的组合对我来说似乎很合理。感谢所有建议的人。但是,如果没有<h1>标签怎么办?我认为一些(诚然,不好)的作者不使用它们,而只是指定<div><span>的字体大小。

我目前正在创建我的第一个浏览器扩展程序。 (这不是很好吗?)它有一个功能,让你保存当前标签,所以它应该通常工作,并尽可能多的页面。

谢谢你们所有人! :)

3 个答案:

答案 0 :(得分:4)

在此SO页面中,找到<title><h1>的常用字符串是一种有效的解决方案。

<title>javascript - How to guess the REAL title of an HTML document? - Stack Overflow</title>
<h1>How to guess the REAL title of an HTML document?</h1>
 Common string is "How to guess the REAL title of an HTML document?"

答案 1 :(得分:4)

标题标签是任意的,h1标签是任意的。您真正希望的最好的方法是逐个站点地定制脚本,并希望站点至少始终如一地执行页面之间的操作。例如,使用SO,您可以看到它们[标签] - [问题] - [网站]。所以你可以轻松地在连字符处分开并抓住第二个元素。没有真正的“一刀切”的解决方案。要对网站进行研究,找到模式。

编辑:

基于评论中的回应...... IMO“足够好的猜测”将涉及

1)仅查看document.title。正如其他人所提到的,人们可以使用除了h1标签之外的其他东西来获取页面内的“标题”,然后你冒着查看根本不属于标题的东西的风险。

2)在连字符,管道或冒号处分开。这些是使用的3种最常见的分隔符。

3)如果拆分产生2个以上的数组元素,请查看最后一个元素是否为indexOf域返回true。如果是这样,请使用倒数第二个元素。如果没有,请使用最后一个数组元素。

答案 2 :(得分:2)

在您的第一个示例中,您可能在DOM中有足够的信息来确定它是Site name - Title还是Title - Site name。您可以在URL和页面文本中查找术语。很可能,Site name将在页面文本中比实际标题更频繁地使用。但任何这样的启发式都不会完美。

除此之外,您还必须采用您从多个不同域中检查许多不同页面而构建的启发式方法。我们已经做了类似的事情来区分页面内容和侧边栏,广告以及HTML页面上的其他内容。它通常不是100%可靠,但在遵循常见模式的网站上非常可靠。

正如其他人所指出的,你会发现h1标签经常(但不总是)重复标题文本。但有时设计师使用名为“title”或“main_content”或“header”或其他内容的div。或者他们将使用h2作为内容标题。

我建议您先处理这个简单的案例。也就是说,如果您在标题中看到连字符( - ),则假定它是站点名称 - 标题或标题 - 站点名称。当您可靠地工作时,请查看您如何确定标题是否实际代表页面内容。