Strip_tags () samanlıkta Burns zaman

1 Cevap php

Ben programlı adreslerini kazımak için sürünüyorum her ABD Kongresi üyesi için web sitelerinin bir listesi var. Sitelerin çoğu, altta yatan biçimlendirme değişir, ama siteler yüzlerce yazdığım komut dosyası için beklenen sonuç veren olmadığını görmeye başladı kadar bu başlangıçta bir sorun değildi.

Potansiyel nedenlerini değerlendirmek için biraz daha zaman aldıktan sonra, ben strip_tags() sonuçlarına çağrıda file_get_contents() birçok kez sayfa kaynağının en silme bulundu! Bu HTML kaldırarak, ben kazımak istedim olmayan HTML çıkarmadan değil sadece!

Yani strip_tags(), tüm alfanümerik olmayan karakterleri kaldırmak için bir çağrı değiştirmiş ve işlemini başka verdi koşmak için çağrı kaldırıldı. Diğer sonuçlar geldi, ancak hala birçok yoktu. Benim düzenli ifadeler istenilen desen eşleştirme değildi çünkü bu kez. Döndürülen kodu baktıktan sonra, benim kalıpları kırma, metin boyunca serpiştirilmiş HTML niteliklerinden kalıntıları olduğunu fark etti.

Bu etrafında bir yolu var mı? Bu hatalı biçimlendirilmiş HTML sonucudur? Ben bu konuda bir şey yapabilir miyim?

1 Cevap

Okur PHP kılavuzunda bir uyarı var:

Because strip_tags() does not actually validate the HTML, partial, or broken tags can result in the removal of more text/data than expected.

Birçok farklı siteleri kazıma, ve onların HTML geçerliliği için hesap edemez, çünkü bu her zaman bir sorun olacak. Ne yazık ki, regexp'nin regexps simply aren't cut out to be document parsers gibi, ya da sizin için bunu yapmak için gidiş değildir.

I PHP Simple HTML DOM Parser gibi bir şey, hatta yerleşik DOMDocument->loadHTML() yöntemini kullanırsınız.

Eğer kazımak istedim, ve bilgi bu sayfanın yapısında bulunan nerede, her sayfayı kaydedilen küçük bir veritabanı tutmak olabilir. Eğer DOM çözümleyici için yeni bir yol konuma ile veritabanını güncellemek ve sonraki kazıma üzerine alabilir durumda bunu kazınmış her zaman, sen, yapısı değişmiş olsaydı görmek için hızlı bir kontrol yapabilirdi.