Методы извлечения «лучшего» изображения с веб-страницы - PullRequest
9 голосов
/ 11 марта 2010

Я пытаюсь создать что-то похожее на функциональность Facebook "Поделиться" для моего сайта.

Я дошел до того, что могу принять URL-адрес, очистить его от мета-ключевых слов и соответственно получить заголовки / описания, но я немного застрял в том, как определить «вероятные» фотографии, которые пользователь может хочу поделиться.

В настоящее время я использую SimpleXMLElement, чтобы превратить страницу в проходимый DOM и найти все теги, превратив их в абсолютные URL-адреса. После этого я не уверен, как найти подходящий эскиз.

Могу ли я загрузить их все и перейти к размеру файла? Использую ли я какое-то эвристическое подобие, "встречалось в середине страницы"?

У кого-нибудь еще есть какие-либо рекомендации, предложения или советы?

Ответы [ 2 ]

7 голосов
/ 11 марта 2010

Некоторое время назад я написал нечто подобное, чтобы получать изображения из записок в блоге. Моими критериями при выборе изображения было что-то вроде получения списка всех изображений на странице с последующим назначением «точек приоритета»:

  • Игнорировать изображения, размещенные в черном списке, взятом из списка AdBlocker
  • Игнорировать косвенные изображения, например, связанные с таблицами стилей или в рамке
  • Игнорировать изображения шириной менее 50 пикселей или выше
  • Игнорировать изображения, которые повторяются более одного раза
  • Назначение точек приоритета изображениям, размещенным в белом списке хостов (например, photobucket, imageshack.us)
  • Назначение точек приоритета для 3 самых больших изображений на странице
  • Назначение точек приоритета изображениям на одном хосте
  • Назначение точек приоритета изображениям с определенным тегом ALT
  • Назначение точек приоритета изображениям, отображаемым в теге P

Затем выберите тот, который имеет наибольшее количество приоритетов. Это, конечно, не было надежным или слишком научным, но оно получало что-то полезное гораздо чаще, чем нет.

3 голосов
/ 11 марта 2010

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

Я бы посмотрел на два набора элементов: свойства изображения и контекст, где / как размещены изображения.

Свойства изображения:

  • Ширина и высота соответствуют минимальным порогам
  • Соотношение сторон является разумным (фоновые изображения, которые могут иметь экстремальные пропорции, что дает хороший признак того, что изображение может не подходить)
  • В изображении присутствует несколько цветов (их труднее обнаружить, но можно избежать различных фоновых изображений)

Контекст изображения:

  • Изображение не повторяется на странице (это позволяет избежать использования значков и других элементов дизайна, которые могут повторяться)
  • Происходит после тегов h1, h2 и т. Д. На странице; это приводит вас к выводу об изображениях, идущих с середины страницы, опять же избегая элементов дизайна.
  • Имеет тег alt (хотя он используется не всегда, поэтому, возможно, не дает много полезной информации)

Я бы присвоил веса предыдущим элементам, а затем оценил найденные изображения в соответствии с тем, насколько хорошо каждое изображение удовлетворяет правилам.

Также обратите внимание, что некоторые страницы могут использовать CSS (или Flash и т. Д.) Для отображения изображений. Они находятся за пределами вашей компетенции изображений (согласно алгоритму, который вы определили); возможно не большое дело, но кое-что, чтобы рассмотреть.

...