PHP (XPath), PHP / Python (Regexp) veya Python (XPath) kullanarak html ayıklanıyor bilgi

3 Cevap php

Ben yaklaşık var. 40k + html Ben gelen bilgileri ayıklamak gerekir belgeler. Ben regexpi kullanmayı tavsiye ediyorum ancak html dosyaları (tablo semantik işaretlenmiş değildir .... (en iyi dosya oluşmuş değil çünkü) + + DOMDocument XPath PHP + Tidy kullanarak bunu yapmaya çalıştım ama son derece yavaş anlamı daha az tag / her yerde) kullanılan sınıflar ve ben başlamalıdır nerede bilmiyorum tabanlı düzeni, ...

Sadece merak olmak, Python'un XPath kütüphanesini kullanarak daha (PHP / Python) hızlı regexpi kullanıyor? Python için XPath kütüphane PHP'nin meslektaşı genellikle daha hızlıdır?

3 Cevap

Hızlı bir gereksinim ise lxml bakabilirsiniz. lxml libxml2 ve libxslt C kütüphaneleri için bağlayıcı bir pythonic olduğunu. C kitaplıkları kullanarak herhangi saf php veya python sürümünden çok daha hızlıdır.

Bazı etkileyici benchmarks Ian Bicking gelen vardır:

In Conclusion

Ben bu kriterleri başlamadan önce lxml hızlı olduğunu biliyordum, ama bunu hızlı oldukça bu olmasını beklemiyorduk.

Sonuçlar Ayrıştırma:

Parsing Resutls

Python bir denemek Beautiful Soup verebilir. Bu çöp HTML üzerinden kullanılabilir bir DOM üretmek için oldukça büyük bir ayrıştırıcı bulunuyor. Bazı regex becerileri ile bu ihtiyacın ne alabilirsiniz. Mutlu avcılık!

Python çoğu karşılaştırmalı işlemler benim öznel deneyim PHP daha hızlıdır. Kısmen Python derlenen bir dil olma yerine, kısmen Python katkıda bulunanlar tarafından daha fazla verimlilik için optimize edilmiş olmasına, zamanında yorumlanır için ...

Yine, 40k + belgeler için, bir güzel hızlı bir makine bulmak ;-)

Önceki sonrası genel Python bahseder gibi nedeniyle byte-kod derleme (olanlardır. Pyc dosyaları) php daha hızlıdır. Ve DOM / SAX ayrıştırıcıların çok içten zaten regexp adil biraz kullanabilirsiniz. Regexpi kullanmak için söyledim olanlar bunun sihirli bir değnek olmadığını söyledi gerekir. 40k + belgeler için ben yeni multi-Konu veya klasik parallel python kullanarak görevi parallelizing öneriyoruz.