2009-10-19 15 views
6

Ich habe Snapshots von mehreren Webseiten bei 2 mal aufgenommen. Was ist eine zuverlässige Methode, um festzustellen, welche Webseiten geändert wurden?wie zu bestimmen, ob Webseite geändert wurde

Ich kann nicht auf etwas wie einen RSS-Feed verlassen, und ich muss geringfügige Geräusche wie Datum Text ignorieren.

Idealerweise suche ich nach einer Python-Lösung, aber ein intuitiver Algorithmus wäre auch großartig.

Danke!

+0

Meinst du Bilder, wenn du Schnappschüsse sagst? Oder historisches HTML? –

+0

nur der HTML - keine unterstützenden Dateien – hoju

+0

Möchten Sie die Struktur (HTML-Tags) oder den Inhalt oder beide zu differieren? – elhoim

Antwort

8

Nun, zuerst müssen Sie entscheiden, was Lärm ist und was nicht. Sie können einen HTML-Parser wie BeautifulSoup verwenden, um das Rauschen zu entfernen, das Ergebnis hübsch auszudrucken und es als Zeichenfolge zu vergleichen.

Wenn Sie nach einer automatischen Lösung suchen, können Sie die Unterschiede zwischen den Seiten mit difflib.SequenceMatcher berechnen, similarity berechnen und mit einem Schwellenwert vergleichen.

0

Etwas wie Levenshtein Distance könnte nützlich sein, wenn Sie den Schwellenwert für die Änderungen auf eine Entfernung einstellen, die die richtige Menge an Rauschen für Sie ignoriert.

+0

Levenshtein Entfernung ist O (n^2) und wird wahrscheinlich sehr viel ineffizient für ganze Webseiten sein. Sie können es jedoch auf Sequenzen verallgemeinern und Wörter als Symbole statt als Zeichen wahrnehmen. Das könnte funktionieren. – bayer

3

Die Lösung hängt wirklich ab, wenn Sie eine bestimmte Site scrapen oder versuchen, ein Programm zu erstellen, das für jede Site funktioniert.

können Sie sehen, welche Bereiche häufig so etwas wie dies zu tun ändern:

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

Wenn Ihr nur besorgt über eine einzige Website, können Sie einige sed Ausdrücke erstellen Sachen wie Zeitstempel auszufiltern. Sie können wiederholen, bis für kleine Felder kein Unterschied mehr angezeigt wird.

Das allgemeine Problem ist viel schwieriger, und ich würde vorschlagen, die Gesamtzahl der Wörter auf einer Seite für Starter vergleichen.

+0

Ja, ich suche nach einem allgemeinen Ansatz. Die Gesamtzahl der Wörter ist eine interessante (und unkomplizierte) Idee. – hoju

-1

machen Sie nur Schnappschüsse von den Dateien mit MD5 oder SHA1 ... wenn die Werte bei der nächsten Überprüfung abweichen, dann werden sie geändert.

+0

das Problem ist, dass diese Art von Ansatz nicht mit Lärm umgehen kann. Eine Webseite kann beispielsweise das heutige Datum anzeigen, das sich ändert, auch wenn der Inhalt nicht geändert wurde. – hoju

+0

ic .. Ich missverstanden Ihre Anforderung. – ghostdog74