2010-07-21 33 views
7

Je voudrais reproduire la fonctionnalité que Facebook utilise pour analyser un lien. Lorsque vous soumettez un lien dans votre statut Facebook, leur système s'éteint et récupère un title, summary suggéré et souvent un ou plusieurs image s à partir de cette page, à partir de laquelle vous pouvez choisir une vignette.Récupérer des résumés de liens de type Facebook (titre, résumé, images pertinentes) en utilisant Python

Mon application doit accomplir ceci en utilisant Python, mais je suis ouvert à n'importe quel genre de guide, blog ou expérience d'autres développeurs qui se rapporte à ceci et pourrait m'aider à comprendre comment l'accomplir. .

Je voudrais vraiment apprendre de l'expérience des autres avant tout sauter dans

Pour être clair, quand il reçoit l'URL d'une page Web, je veux être en mesure de récupérer:

  1. Le titre: Probablement juste le <title> tag mais peut-être le <h1>, pas sûr.
  2. Un résumé d'un paragraphe de la page.
  3. Un ensemble d'images pertinentes pouvant être utilisées comme vignettes. (La partie difficile est de filtrer les images non pertinentes comme des bannières ou des coins arrondis)

Je dois peut-être l'implémenter moi-même, mais j'aimerais au moins savoir comment d'autres personnes ont fait ce genre de tâches.

Répondre

2

BeautifulSoup est bien adapté pour accomplir la plupart de cela.

Fondamentalement, vous simplement l'objet initialize soup, faire quelque chose comme ce qui suit pour en extraire ce qui vous intéresse:

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

Vous pouvez ensuite télécharger chacune des images en fonction de leur url en utilisant urllib2.

Le titre est assez simple, mais les images peuvent être un peu plus difficiles car vous devez les télécharger pour obtenir les statistiques pertinentes. Peut-être pourriez-vous filtrer la plupart des images en fonction de la taille et du nombre de couleurs? Les coins arrondis, à titre d'exemple, vont être petits et n'ont généralement que 1-2 couleurs, en général.

En ce qui concerne le résumé de la page, qui peut être un peu plus difficile, mais je l'ai fait quelque chose comme ceci:

  1. J'utilise BeautifulSoup pour supprimer tous les styles, scripts, forme, et des blocs de tête de html en utilisant: .findAll, puis .extract.
  2. Je prends le reste du texte en utilisant: .join(soup.findAll(text = True))

Dans votre application, vous pouvez peut-être utiliser ce contenu "text" comme le résumé de la page?

J'espère que cela aide.

+3

BeautifulSoup est pas bien pris en charge sur Python 3.1, et son auteur original ne le fait pas plus beaucoup de développement. Il vaut probablement mieux utiliser lxml.html et/ou html5lib (ce dernier est recommandé par l'auteur de BeautifulSoup). – lunaryorn

+0

Bon à savoir pour référence future. Merci! –

1

Voici une solution complète: 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 
>>> 
+0

Ce projet, malheureusement, ne supporte pas Python 3. – illagrenan

+0

@illagrenan PRs sont les bienvenus – ducu