Как угадать РЕАЛЬНОЕ название документа HTML? - PullRequest
1 голос
/ 16 февраля 2011

Многие люди помещают крайне бесполезные и раздражающие вещи в свои теги <title>, и я пытаюсь найти код Javascript, который извлекает только интересную часть.

Например, в поиске Google вы получите заголовок этого документа:
некоторый случайный поиск - Поиск в Google
Часть "Поиск Google" является избыточной, поскольку у вас уже есть эта информация в доменном имени (и значок). В этом примере я только хочу эту часть:
some random search

Большинство авторов сайта, вероятно, используют "тире нотацию", которая выглядит следующим образом:
Site name - Title или
Title - Site name
Но если бы это было так просто, я бы не спрашивал здесь. ;)

Есть также несколько действительно раздражающих случаев, когда заголовок вообще отсутствует в теге <title>. (О, ирония!) Просто взгляните на эту страницу из Нью-Йорк Таймс: Слабые стороны египетских эксплуататоров, эксплуатирующих Интернет - NYTimes.com . Принимая во внимание, что заголовок статьи фактически: Egypt Leaders Found ‘Off’ Switch for Internet. Что за черт, Нью-Йорк Таймс?

Какой самый надежный подход для извлечения этой информации при условии, что у нас есть доступ к DOM страницы? Я думаю, что хорошей отправной точкой будет тег <h1>, но он ненадежен. Я предполагаю, что есть много авторов, которые вообще не используют его или используют его несколько раз.

Обновление: мне кажется разумным сочетание содержимого <title> и <h1>. Спасибо всем, кто предложил это. Но что, если нет тега <h1>? Я думаю, что некоторые (по общему признанию, плохие) авторы не используют их и вместо этого просто указывают размер шрифта <div> или <span>.

Я сейчас создаю самое первое расширение для браузера. (Разве это не хорошо?) Он имеет функцию, позволяющую сохранить текущую вкладку, поэтому она должна работать в целом и для максимально возможного количества страниц.

Спасибо всем вам! :)

Ответы [ 3 ]

4 голосов
/ 16 февраля 2011

теги заголовка являются произвольными, теги h1 - произвольными. Лучшее, на что вы действительно можете надеяться - это адаптировать ваш скрипт для каждого сайта в отдельности и надеяться, что сайт, по крайней мере, последовательно делает что-то от страницы к странице. Как, например, с SO вы можете видеть, что они делают [тег] - [вопрос] - [сайт]. Таким образом, вы можете легко разделить дефис и взять 2-й элемент. Никакого реального решения "один размер подходит всем". Нужно сделать исследование для сайта, найти шаблон.

редактирование:

Основываясь на ответе в комментарии ... IMO "достаточно хорошее предположение" будет включать

1) только смотря на document.title. Как уже упоминали другие, люди могут использовать другие вещи, кроме тегов h1, для «заголовка» на странице, и тогда вы рискуете посмотреть на то, что вообще не предназначено для заголовка.

2) разделить на дефис, трубу или двоеточие. Это три наиболее распространенных разделителя.

3) Если при разбиении получается 2+ элемента массива, посмотрите, вернет ли последний элемент значение true для индекса домена. Если это так, используйте 2-й до последнего элемента. Если нет, используйте последний элемент массива.

4 голосов
/ 16 февраля 2011

На этой странице 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?"
2 голосов
/ 16 февраля 2011

В первом примере у вас может быть достаточно информации в DOM, чтобы определить, является ли она Site name - Title или Title - Site name.Вы можете искать термины в URL и в тексте страницы.Вполне вероятно, что Site name будет использоваться в тексте страницы чаще, чем фактический заголовок.Но любая такая эвристика будет менее чем идеальной.

Помимо этого, вам придется прибегнуть к эвристическим методам, которые вы создаете со временем, изучая множество разных страниц в разных доменах.Мы сделали что-то подобное, чтобы различать контент страницы и боковые панели, рекламу и другие материалы на страницах HTML.Это не на 100% надежно в целом, но это очень надежно на сайтах, которые следуют общим шаблонам.

Вы увидите, как другие отмечали, что h1 теги часто (но невсегда) повторять текст заголовка.Но иногда дизайнер использовал div с именем "title" или "main_content" или "header" или чем-то еще.Или они будут использовать h2 в качестве заголовка контента.

Я бы посоветовал вам сначала поработать над простым делом.То есть, если вы видите дефис (-) в заголовке, предположите, что это либо имя сайта - название, либо заголовок - название сайта.Когда вы получите надежную работу, посмотрите, как вы определяете, действительно ли заголовок соответствует содержанию страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...