Hangi HTML Ayrıştırıcı en iyisidir? [kapalı]


194

Bir çok ayrıştırıcıyı kodluyorum. Şimdiye kadar, ayrıştırma ve tarayıcı otomasyonu için HtmlUnit başsız tarayıcı kullanıyordum.

Şimdi her iki görevi de ayırmak istiyorum.

Çalışmamın% 80'i sadece ayrıştırmayı içerdiğinden, HtmlUnit'te önce bir sayfa yüklemek, sonra kaynağı almak ve sonra ayrıştırmak çok zaman aldığı için hafif bir HTML ayrıştırıcı kullanmak istiyorum.

Hangi HTML ayrıştırıcısının en iyi olduğunu bilmek istiyorum. Ayrıştırıcı, HtmlUnit ayrıştırıcısına yakınsa daha iyi olur.


DÜZENLE:

En iyi ihtimalle, en azından aşağıdaki özellikleri istiyorum:

  1. hız
  2. Herhangi bir HtmlElement öğesini "id" veya "name" veya "tag type" ile bulmayı kolaylaştırın.

Kirli HTML kodunu temizlemezse benim için sorun olmaz. Herhangi bir HTML kaynağını temizlememe gerek yok. Sadece HtmlElements arasında hareket ve onlardan veri hasat için en kolay bir yol gerekir.


2
Ne demek "en iyi"? Hız, mevcut uygulamadan geçiş kolaylığı, W3C standartlarına bağlılık, aklıma gelmediğim başka bir şey mi demek istediniz? Sorunuz hızı ifade ediyor, ancak aynı zamanda geliştirme geçiş zamanını da içeriyor. Bazı açıklamalar, başkalarının ihtiyaçlarınızı daha iyi karşılayacak iyi ayrıştırıcıları tavsiye etmelerine yardımcı olabilir.
aperkins

2
'Çok fazla ayrıştırıcıyı kodluyorum' ifadeniz bu soruya uymuyor gibi görünüyor. Şunu mu demek istediniz: 'html ayrıştırıcıları çok kullanmam gerekiyor mu?'
boş

11
Bu sorunun "yapıcı olmayan" yakın nedenden muaf olacak kadar spesifik olduğunu düşünüyorum.
Kertenkele Bill

9
Lütfen tekrar açmak için oy verin. Bu yeterince spesifiktir ve kapatılmamalıdır.
AZ_

3
Evet, SO'daki bazı insanlar kutsal “en iyi” soruların savaşlarına karşı kutsal bir savaş veriyorlar. Çok can sıkıcı. Cevap oyu bu sorunun yararlı olduğunu açıkça göstermektedir.
user1050755

Yanıtlar:


396

Self plug: Yeni bir Java HTML ayrıştırıcı: jsoup yayınladım . Burada bahsediyorum çünkü benden sonra ne yapacağınızı düşünüyorum.

Parti numarası, öğeleri bulmak için bir CSS seçici sözdizimidir, örneğin:

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
Elements links = doc.select("a");
Element head = doc.select("head").first();

Daha fazla bilgi için Selector javadoc dosyasına bakın .

Bu yeni bir proje, bu yüzden iyileştirme için herhangi bir fikir çok açıktır!


15
Bu şey harika ve CSS seçici desteğini seviyorum. Java kütüphanesi kullandığımı zar zor biliyorum. :-)
William Pietri

17
Lütfen bunu desteklemeyi bırakmayın. Bu, sunucu tarafı Java kullanarak HTML'yi ayrıştırmak için tam olarak ihtiyaç duyduğumuz şey! Bu harika! Ben kaynak sunucuya tam yollar yapmak için tüm src ve href bağlantıları değiştirir sadece birkaç saat içinde bir proxy inşa.
jmort253

7
Daha yeni baktım. Arayüzünü ve dokümantasyonunu seviyorum. Bunu anlamak kolay. :)
emeraldhieu

5
İyi iş! Jsoup'u 10 dakikadan daha kısa bir sürede çalıştırın.
Indrek Kõue

10
İnanılmaz, bu çok hasta. Birkaç dakika içinde bir HTML sayfasını işleyebildim. BU BÜYÜK İŞ İÇİN ÇOK TEŞEKKÜR EDERİZ.
Michael-O

32

Şimdiye kadar gördüğüm en iyi HtmlCleaner :

HtmlCleaner, Java ile yazılmış açık kaynaklı bir HTML ayrıştırıcısıdır. Web'de bulunan HTML genellikle kirli, kötü biçimlendirilmiş ve daha sonraki işlemler için uygun değildir. Bu tür belgelerin ciddi bir şekilde tüketilmesi için, önce karışıklığı temizlemek ve siparişi etiketlere, niteliklere ve normal metne getirmek gerekir. Verilen HTML belgesi için, HtmlCleaner tek tek öğeleri yeniden sıralar ve iyi biçimlendirilmiş XML üretir. Varsayılan olarak, çoğu web tarayıcısının Belge Nesne Modeli oluşturmak için kullandığı benzer kuralları izler. Ancak, kullanıcı, etiket filtreleme ve dengeleme için özel etiket ve kural kümesi sağlayabilir.

HtmlCleaner ile XPath kullanarak herhangi bir öğeyi bulabilirsiniz.

Diğer html ayrıştırıcıları için bu SO sorusuna bakın .


1
Proxy'yi kendiniz işlemeli, ardından akışınızı işlemek için HtmlCleaner'ı kullanmalısınız. => Uygun değil. T__T
kidnan1991

HTMLTidy burada daha iyi bir seçenek olmaz mı? html-tidy.org
Troy Witthoeft

1
Similar rules that the most of web browsers use- Bu çok inandırıcı değil
pguardiario

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.