Получение кратких ссылок на ссылки в Facebook (заголовок, сводка, релевантные изображения) с использованием Python - PullRequest
7 голосов
/ 21 июля 2010

Я хотел бы повторить функции, которые Facebook использует для анализа ссылки. Когда вы отправляете ссылку в свой статус на Facebook, их система отключается и получает рекомендуемые title, summary и часто одну или несколько релевантных image с этой страницы, из которых вы можете выбрать эскиз.

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

Мне бы очень хотелось поучиться на опыте других людей, прежде чем просто прыгнуть.

Для ясности, когда мне предоставляется URL-адрес веб-страницы, я хочу иметь возможность получить:

  1. Заголовок: Возможно, это просто тег <title>, но, возможно, <h1>, не уверен.
  2. Краткое содержание страницы в один абзац.
  3. Куча релевантных изображений, которые можно использовать в качестве эскиза. (Сложнее всего отфильтровать нерелевантные изображения, такие как баннеры или закругленные углы)

Возможно, мне придется реализовать это самому, но я бы хотя бы хотел узнать о том, как другие люди выполняют такие задачи.

Ответы [ 2 ]

2 голосов
/ 21 июля 2010

BeautifulSoup хорошо подходит для выполнения большинства из этих задач.

По сути, вы просто инициализируете объект soup, а затем делаете что-то вроде следующего, чтобы извлечь то, что вас интересует:

title = soup.findAll('title')
images = soup.findAll('img')

Затем можно загрузить каждое из изображений на основе их url, используя urllib2.

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

Что касается сводки страниц, это может быть немного сложнее, но я делал что-то вроде этого:

  1. Я использую BeautifulSoup , чтобы удалить все блоки стилей, сценариев, форм и заголовков из html, используя: .findAll, затем .extract.
  2. Я беру оставшийся текст, используя: .join(soup.findAll(text = True))

В вашем приложении, возможно, вы могли бы использовать это "text" содержимое в качестве сводки страницы?

Надеюсь, это поможет.

1 голос
/ 10 июня 2014

Вот полное решение: https://github.com/svven/summary

>>> import summary
>>> s = summary.Summary('http://stackoverflow.com/users/76701/ram-rachum')
>>> s.extract()
>>> s.title
u'User Ram Rachum - Stack Overflow'
>>> s.description
u'Israeli Python hacker.'
>>> s.image
https://www.gravatar.com/avatar/d24c45635a5171615a7cdb936f36daad?s=128&d=identic
on&r=PG
>>>
...