Domanda

Naturalmente una pagina HTML possono essere analizzati utilizzando un qualsiasi numero di parser Python, ma sono sorpreso che non sembrano essere gli script di analisi pubblici per estrarre contenuto significativo (esclusi barre laterali, navigazione, ecc) da una data doc HTML.

Sto indovinando è qualcosa come la raccolta di elementi DIV e P e poi controllando per un importo minimo di contenuto del testo, ma sono sicuro che una solida implementazione dovrebbe includere un sacco di cose che non ho pensato.

È stato utile?

Soluzione

Prova il Beautiful Soup libreria per Python. Ha metodi molto semplici per estrarre informazioni da un file HTML.

Il tentativo di genericamente estrarre i dati dalle pagine web richiederebbero le persone a scrivere le loro pagine in modo simile ... ma c'è un numero quasi infinito di modi per trasmettere una pagina che sembra identica per non parlare di tutti i conbinations si può avere per trasmettere il stesse informazioni.

era lì un particolare tipo di informazioni che si stava tentando di estrarre o qualche altro obiettivo finale?

Si potrebbe provare l'estrazione di qualsiasi contenuto in 'div' e marcatori 'P' e confrontare le dimensioni relative di tutte le informazioni nella pagina. Il problema allora è che la gente probabilmente informazioni gruppo in raccolte di 'div e' di p (o almeno lo fanno se sono la scrittura html ben formato!).

Forse se hai formato un albero di come l'informazione è legato (nodi sarebbe la 'p' o 'div o qualsiasi altra cosa e ogni nodo dovrebbe contenere il testo associato) si potrebbe fare una sorta di analisi per individuare il più piccolo' p 'o 'div' che encompases quello che sembra essere la maggior parte delle informazioni ..?

[EDIT] Forse, se si può ottenere nella struttura ad albero ho suggerito, si potrebbe quindi utilizzare un sistema a punti simile a assassin spam. Definire alcune regole che tentano di classificare le informazioni. Alcuni esempi:

+1 points for every 100 words
+1 points for every child element that has > 100 words
-1 points if the section name contains the word 'nav'
-2 points if the section name contains the word 'advert'

Se avete un sacco di regole a basso punteggio che si sommano quando si trova più relevent cercando sezioni, penso che potrebbe evolversi in una tecnica abbastanza potente e robusto.

[EDIT2] Guardando la leggibilità, che sembra stia facendo più o meno esattamente quello che ho appena suggerito! Forse potrebbe essere migliorata per cercare di capire le tabelle meglio?

Altri suggerimenti

Date un'occhiata a templatemaker: http://www.holovaty.com/writing/templatemaker/

E 'scritto da uno dei fondatori di Django. In pratica si alimentano alcuni file esempio html e sarà generare un "modello" che è possibile utilizzare per estrarre solo i bit che sono diverse (che di solito è il contenuto significativo).

Ecco un esempio dalla google code page :


# Import the Template class.
>>> from templatemaker import Template

# Create a Template instance.
>>> t = Template()

# Learn a Sample String.
>>> t.learn('<b>this and that</b>')

# Output the template so far, using the "!" character to mark holes.
# We've only learned a single string, so the template has no holes.
>>> t.as_text('!')
'<b>this and that</b>'

# Learn another string. The True return value means the template gained
# at least one hole.
>>> t.learn('<b>alex and sue</b>')
True

# Sure enough, the template now has some holes.
>>> t.as_text('!')
'<b>! and !</b>'

È possibile utilizzare la boilerpipe applicazione Web per recuperare ed estrarre il contenuto in tempo reale.

(Questo non è specifico per Python, come avete solo bisogno di emettere una richiesta HTTP GET a una pagina su Google AppEngine).

Saluti,

Christian

Che cosa è significativo e ciò che non lo è, dipende dalla semantica della pagina. Se la semantica è pessima, il codice non sarà "indovinare" che cosa è significativo. Io uso la leggibilità, che si è collegato nel commento, e vedo che in molte pagine cerco di leggerlo non fornisce alcun risultato, non parliamo di una decente.

Se qualcuno mette il contenuto in una tabella, siete condannati. Prova la leggibilità su un forum phpBB vedrete cosa intendo.

Se si vuole fare, andare con un'espressione regolare su <p></p>, o analizzare il DOM.

Goose è solo la libreria per questo compito. Per citare il loro README:

  

Goose cercherà di estrarre le seguenti informazioni:

     
      
  • testo principale di un articolo
  •   
  • L'immagine principale dell'articolo
  •   
  • Le eventuali filmati Youtube / Vimeo incorporati in un articolo
  •   
  • Meta Description
  •   
  • Meta tag
  •   
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top