2009-10-19 9 views
6

Ho snapshot di più pagine Web prese in 2 volte. Qual è un metodo affidabile per determinare quali pagine web sono state modificate?come determinare se la pagina web è stata modificata

Non posso fare affidamento su qualcosa come un feed RSS, e ho bisogno di ignorare il rumore minore come il testo della data.

Idealmente sto cercando una soluzione Python, ma anche un algoritmo intuitivo sarebbe fantastico.

Grazie!

+0

Intendi immagini quando dici istantanee? O HTML storico? –

+0

solo l'HTML - nessun file di supporto – hoju

+0

Vuoi diffare la struttura (tag html) o il contenuto o entrambi? – elhoim

risposta

8

Bene, prima devi decidere che cos'è il rumore e cosa no. È possibile utilizzare un parser HTML come BeautifulSoup per rimuovere il rumore, stampare piuttosto il risultato e confrontarlo come una stringa.

Se si sta cercando una soluzione automatica, è possibile utilizzare difflib.SequenceMatcher per calcolare le differenze tra le pagine, calcolare lo similarity e confrontarlo con una soglia.

0

Qualcosa come Levenshtein Distance potrebbe tornare utile se si imposta la soglia delle modifiche su una distanza che ignorava la giusta quantità di rumore per voi.

+0

La distanza di Levenshtein è O (n^2) e molto probabilmente sarà molto meno efficiente per intere pagine web. Puoi comunque generalizzare le sequenze e percepire le parole come simboli anziché come caratteri. Potrebbe funzionare. – bayer

3

La soluzione dipende in realtà se si sta raschiando un sito specifico o si sta tentando di creare un programma che funzionerà per qualsiasi sito.

È possibile vedere quali aree cambiano spesso fare qualcosa di simile:

diff <(curl http://stackoverflow.com/questions/) <(sleep 15; curl http://stackoverflow.com/questions/) 

Se il solo preoccupati per un singolo sito, è possibile creare alcune espressioni sed per filtrare le cose come data e ora. Puoi ripetere fino a quando non viene mostrata alcuna differenza per i campi piccoli.

Il problema generale è molto più difficile e suggerirei di confrontare il numero totale di parole su una pagina per i principianti.

+0

sì, sto cercando un approccio generale. Il conteggio totale delle parole è un'idea interessante (e diretta). – hoju

-1

è sufficiente scattare istantanee dei file con MD5 o SHA1 ... se i valori si differenziano alla successiva verifica, vengono modificati.

+0

il problema è che quel tipo di approccio non può affrontare il rumore. Ad esempio una pagina web può visualizzare la data di oggi, che cambierà anche quando il contenuto non è stato modificato. – hoju

+0

ic .. ho frainteso il tuo requisito. – ghostdog74