2009-10-19 20 views
6

Mam migawki wielu stron internetowych wykonanych 2 razy. Jaka jest wiarygodna metoda określania, które strony zostały zmodyfikowane?sposób określania, czy strona internetowa została zmodyfikowana

Nie mogę polegać na czymś w rodzaju kanału RSS i muszę zignorować drobne zakłócenia, takie jak tekst daty.

Idealnie szukam rozwiązania Python, ale intuicyjny algorytm również byłby świetny.

Dzięki!

+0

Czy masz na myśli obrazy, gdy mówisz migawki? Lub historyczny HTML? –

+0

tylko kod HTML - brak plików pomocniczych – hoju

+0

Czy chcesz zmienić strukturę (znaczniki html) lub zawartość, albo obie opcje? – elhoim

Odpowiedz

8

Po pierwsze, musisz zdecydować, co to jest szum, a co nie. Możesz użyć parsera HTML, takiego jak BeautifulSoup, aby usunąć szum, wydrukować wynik i porównać go jako ciąg.

Jeśli szukasz automatycznego rozwiązania, możesz użyć difflib.SequenceMatcher, aby obliczyć różnice między stronami, obliczyć wartość similarity i porównać ją z progiem.

0

Coś w rodzaju Levenshtein Distance może się przydać, jeśli ustawisz próg zmian na odległość, która zignoruje dla ciebie odpowiednią ilość szumu.

+0

Levenshtein odległość jest O (n^2) i najprawdopodobniej będzie dużo nieskuteczne dla całych stron. Możesz jednak uogólnić go na sekwencje i postrzegać słowa jako symbole zamiast znaków. To może zadziałać. – bayer

3

Rozwiązanie zależy od tego, czy skanujesz konkretną witrynę, czy próbujesz utworzyć program, który będzie działał dla dowolnej witryny.

Możesz zobaczyć, które obszary zmieniają się często robi coś takiego:

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

Jeśli martwisz się tylko o jednym miejscu, można utworzyć kilka wyrażeń sed odfiltrować rzeczy jak stempli czasowych. Możesz powtarzać, dopóki nie zobaczysz żadnej różnicy dla małych pól.

Ogólny problem jest znacznie trudniejszy i sugerowałbym porównanie całkowitej liczby słów na stronie dla początkujących.

+0

tak, szukam ogólnego podejścia. Łączna liczba słów jest interesująca (i prosta). – hoju

-1

wystarczy zrobić migawki plików z MD5 lub SHA1 ... jeśli wartości różnią się przy następnym sprawdzaniu, są one modyfikowane.

+0

Problem polega na tym, że takie podejście nie może zajmować się hałasem. Na przykład strona internetowa może wyświetlać dzisiejszą datę, która zmieni się nawet wtedy, gdy zawartość nie została zmodyfikowana. – hoju

+0

ic .. źle zrozumiałem twoje wymagania. – ghostdog74

Powiązane problemy