2009-07-18 10 views
22

Sto provando a creare un parser HTML generalizzato che funzioni bene sui post dei blog. Voglio puntare il mio parser sull'URL specifico di entrie e recuperare il testo pulito del post stesso. Il mio approccio di base (da python) è stato quello di utilizzare una combinazione di BeautifulSoup/Urllib2, che va bene, ma presuppone che tu conosca i tag appropriati per il blog. Qualcuno ha qualche idea migliore?Crea Great Parser - Estrai testo pertinente da HTML/Blog

Ecco alcuni pensieri su cui qualcuno potrebbe espandersi, che non ho ancora abbastanza conoscenze/know-how da implementare.

  1. Il programma unix 'lynx' sembra di analizzare i post del blog particolarmente bene - quello parser si usano, o come potrebbe essere utilizzato?

  2. Esistono servizi/parser che rimuovono automaticamente annunci indesiderati, ecc.?

  3. In questo caso, ho avuto una vaga idea che possa essere una buona ipotesi che i post dei blog siano di solito contenuti in un determinato tag di definizione con class = "entry" o qualcosa di simile. Quindi, potrebbe essere possibile creare un algoritmo che trovi i tag che racchiudono con il testo più pulito tra di loro - qualche idea su questo?

Grazie!

+1

Lynx utilizza un proprio parser di tagoup. Il codice sorgente è disponibile. – Quentin

risposta

24

Ragazzo, ho la soluzione perfetta per voi.

L'algoritmo di leggibilità di Arc90 fa esattamente questo. Dato il contenuto HTML, preleva il contenuto del testo del post principale del blog, ignorando intestazioni, piè di pagina, navigazione, ecc.

Qui ci sono implementazioni in:

Rilascerò una porta Perl su CPAN in un paio di giorni. Fatto.

Spero che questo aiuti!

+0

Si è scoperto che questo ha funzionato davvero bene - necessario apportare alcune modifiche per renderlo migliore (passare al parser SGML invece di HTMLParser in beautifulsoup), ma che grande soluzione! Grazie –

+0

Una breve nota: lo strumento di leggibilità di Arc90 presenta alcuni punti deboli. Su una pagina complessa come questa (http://blog.moertel.com/articles/2007/02/22/a-simple-directory-tree-printer-in-haskell), silenziosamente la maggior parte dei blocchi di codice cade. Questo è un problema significativo se lo si utilizzerà per estrarre informazioni dai blog _coding_. – Telemachus

+0

Grazie per i link python e php, non sapevo che esistessero. –

3

Ci sono progetti che guardano specificamente al filtraggio del "rumore" di una determinata pagina. Tipicamente il modo in cui questo viene fatto è dare all'algoritmo alcuni esempi di un determinato tipo di pagina, e può guardare quali parti non cambiano tra di loro. Detto questo, dovresti dare all'algoritmo qualche pagina di esempio/post di ogni blog che volevi analizzare. Questo di solito funziona bene quando si dispone di un piccolo insieme definito di siti che verranno sottoposti a scansione (siti di notizie, ad esempio). L'algoritmo sta fondamentalmente rilevando il modello che usano in HTML e individuando la parte interessante. Non c'è magia qui, è dura e imperfetta.

Un grande esempio di questo alogritmo può essere trovato nel codice sorgente EveryBlock.com che era solo open-source. Vai a everyblock.com/code e scarica il pacchetto "ebdata" e guarda il modulo "templatemaker".

E non intendo affermare l'ovvio, ma avete considerato solo l'utilizzo di RSS dai blog in questione? Di solito i campi contengono l'intero post del blog, il titolo e altre meta informazioni insieme a loro. L'uso di RSS sarà molto più semplice della soluzione precedente che ho menzionato.

+0

Sì, in realtà ho i dati RSS, il problema è che molti non hanno il testo completo, e ne ho bisogno in ogni caso. Controllando ora, grazie. –