Kazınmış olan web sitesi değişti olmadığını nasıl anlarsınız?

6 Cevap php

Ben bir web sitesi kazımak ve bazı verileri toplamak için PHP kullanıyorum. Tüm regex kullanarak olmadan bitti. Ben bunun yerine özel HTML etiketlerini bulmak için) yöntemi (php patlamak kullanıyorum.

Bu mümkün olduğunu website değişikliklerine (CSS, HTML) yapısı, daha sonra yanlış veri kazıyıcı tarafından toplanan olabilir eğer. Yani soru - HTML yapısı değişti olmadığını nasıl anlarım? Depolanan yanlış veri önlemek için benim veritabanına herhangi bir veri depolamadan önce, bu nasıl tanıyabiliriz.

6 Cevap

Ben içerik değişiklikleri bir sayfa kazıma eğer herhangi bir temiz çözüm yok düşünüyorum.

Ben birkaç python kazıyıcı geliştirdik ve ben sitesi sadece kendi düzeni üzerinde ince bir değişiklik yaptığında sinir bozucu olabilir biliyorum.

Eğer bir çözüme a la mechanize (php meslektaşı bilmiyorum) deneyebilirsiniz ve eğer şanslıysanız size (link?) Ayıklamak için gereken içeriği izole olabilir.

Başka Possibile yaklaşım bazı kısıtlamalar kod ve mağaza db önce onları kontrol etmek olacaktır.

Eğer Url'leri kazıma Örneğin, ne kazıyıcı çözümlü etti resmen geçerli bir URL olduğunu doğrulamak gerekir; tamsayı kimliği veya ne olursa olsun o kazımak istiyorum için aynı geçerli olarak kabul edilebilir.

Eğer düz metin kazıma ise, bu kontrol daha zor olacaktır.

Eğer yapısı ile ilgili değişiklikleri bilmek istiyorsanız, ben en iyi yolu, ilk sayfanın DOM yapısını saklamak ve daha sonra yenisi ile karşılaştırmak olduğunu düşünüyorum.

There are lot of way you can do it:- SaxParser DOmParser etc

I have a small blog which will give some pointers to what I mean http://let-them-c.blogspot.com/2009/04/xml-as-objects-in-oops.html

veya http://en.wikipedia.org/wiki/Simple_API_for_XML veya DOM Utility ayrıştırıcı kullanabilirsiniz.

İlk olarak, bazı durumlarda yeni html için hashes orijinal karşılaştırmak isteyebilirsiniz. MD5 ve SHA1 iki popüler sağlamalarının vardır. Bu, ya da her koşulda geçerli olabilir ama aşina olması gereken bir şeydir olmayabilir. Içerik, etiketleri, ya da bir şey - şey değişti, bu size söyleyecektir.

Yapısı değişti olmadığını anlamak için etiket olaylar bir histogram yakalamak ve daha sonra bu karşılaştırmak gerekir. Eğer etiketleri sipariş olma konusunda önem veriyorsanız o zaman etiketleri bir ağaç yakalamak ve etiketleri aynı sırayla oluşursa görmek için bir karşılaştırma yapmak gerekir. Bu elde etmek istediğimiz için çok özel olacak.

PHP Simple HTML DOM Parser Eğer HTML ayrıştırmak yardımcı olacak bir araçtır.

Burada kıçımdan konuşan, ancak bazı Document Object Model PHP yöntemleri bakmak isteyebilirsiniz olası.

http://php.net/manual/en/book.dom.php

DOM benim çok, çok sınırlı bir anlayış doğru ise, HTML site yapısında bir değişiklik Document Object Model değiştirmek istiyorsunuz, ama sabit bir yapı içinde basit bir içerik değişiklik olmaz. Yani, DOM devleti yakalamak, ve ardından kazımak her azından karşılaştırmak, teoride böyle bir değişiklik yapılmış olduğunu belirlemek olamazdı olurdu?

. (Arada, bar sınav sonuçları belirli bir sayfada yazılmıştır zaman bir e-posta bildirimi almak için çalışıyordu ben yaptım yolu sadece) değerleri Şaşırtıcı, sorunsuz çalıştı (file_get_contents karşılaştırmak oldu: Hayır yanlış pozitif ve bana e-postayla kısa sürede site içeriği gönderen gibi.)

Site bağlıdır ama div, sınıf ve benzeri kazınmış sayfa sayfa öğelerinin sayısını saymak olabilir sayfa yapısı değiştirilmiş ise stil etiketleri daha sonra sıyrıklar olanlara karşı bu toplamlarını karşılaştırarak algılar.

Bir benzer süreç, her her sınıf veya id isimleri, basit regex kullanarak ekstre saklanır ve gerektiği gibi kontrol edilebilir CSS dosyası için kullanılan olabilir. Bu liste yeni eklemeler varsa o sayfa yapısı neredeyse kesinlikle kazınmış olan sitede bir yerde değişti.

Explode() bir HTML ayrıştırıcı değil, ancak HTML yapısında değişiklikler hakkında bilmek istiyorum. Bu zor olacak. Bir HTML çözümleyici kullanmayı deneyin. Başka bir şey düzgün bunu yapmak mümkün olacak.