2010-07-21 9 views
7

Vorrei replicare la funzionalità utilizzata da Facebook per analizzare un collegamento. Quando si invia un collegamento nello stato di Facebook, il sistema esce e recupera uno title suggerito, summary e spesso uno o più image rilevanti da quella pagina, da cui è possibile scegliere una miniatura.Recupero dei riepiloghi dei link di tipo Facebook (titolo, riepilogo, immagini rilevanti) utilizzando Python

La mia applicazione deve eseguire questa operazione utilizzando Python, ma sono aperto a qualsiasi tipo di guida, post di blog o esperienza di altri sviluppatori che si riferisce a questo e potrebbe aiutarmi a capire come realizzarlo. .

mi piacerebbe davvero imparare dalle esperienze di altre persone prima solo saltare in

Per essere chiari, quando dato l'URL di una pagina web, voglio essere in grado di recuperare:

  1. Il titolo: probabilmente solo il tag <title> ma probabilmente lo <h1>, non è sicuro.
  2. Un riepilogo di un paragrafo della pagina.
  3. Un gruppo di immagini pertinenti che potrebbero essere utilizzate come miniatura. (La parte difficile è filtrare immagini irrilevanti come banner o angoli arrotondati)

Potrei doverlo implementare da solo, ma vorrei almeno sapere come altre persone hanno svolto questo tipo di attività.

risposta

2

BeautifulSoup è adatto per realizzare la maggior parte di questo.

In sostanza, è sufficiente inizializzare l'oggetto soup, poi fare qualcosa di simile a quanto segue per estrarre ciò che ti interessa:

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

È quindi possibile scaricare ciascuna delle immagini in base alla loro url utilizzando urllib2.

Il titolo è abbastanza semplice, ma le immagini potrebbero essere un po 'più difficili dal momento che devi scaricare ognuna per ottenere le statistiche pertinenti su di esse. Forse potresti filtrare la maggior parte delle immagini in base alla dimensione e al numero di colori? Gli angoli arrotondati, ad esempio, saranno piccoli e avranno solo 1-2 colori, generalmente.

Per quanto riguarda il riepilogo pagina, che può essere un po 'più difficile, ma ho fatto qualcosa di simile:

  1. Io uso BeautifulSoup di rimuovere tutti i blocchi di stile, di script, la forma, e la testa da il html utilizzando: .findAll, quindi .extract.
  2. Afferro il testo rimanente utilizzando: .join(soup.findAll(text = True))

Nell'applicazione, forse si potrebbe usare questo contenuto "text" come il riepilogo pagina?

Spero che questo aiuti.

+3

BeautifulSoup non è ben supportato in Python 3.1, e il suo autore originale non fa più molto sviluppo. Probabilmente è meglio usare lxml.html e/o html5lib (quest'ultimo è raccomandato dall'autore di BeautifulSoup). – lunaryorn

+0

Buono a sapersi per riferimento futuro. Grazie! –

1

Ecco una soluzione completa: 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

Questo progetto, sfortunatamente, non supporta Python 3. – illagrenan

+0

@illagrenan I PR sono benvenuti – ducu

Problemi correlati