HTML Parser ใดที่ดีที่สุด [ปิด]


194

ฉันโค้ดตัวแยกวิเคราะห์จำนวนมาก จนถึงตอนนี้ฉันใช้ HtmlUnit เบราว์เซอร์ที่ไม่มีส่วนหัวสำหรับการแยกวิเคราะห์และการทำงานอัตโนมัติของเบราว์เซอร์

ตอนนี้ฉันต้องการแยกงานทั้งสองออก

เนื่องจาก 80% ของงานของฉันเกี่ยวข้องกับการแยกวิเคราะห์ฉันต้องการใช้ตัวแยกวิเคราะห์ HTML แบบใช้แสงเนื่องจากใช้เวลานานใน HtmlUnit ในการโหลดหน้าเว็บครั้งแรกจากนั้นรับแหล่งที่มาและแยกวิเคราะห์

ฉันอยากรู้ว่าตัวแยกวิเคราะห์ HTML ตัวใดดีที่สุด ตัวแยกวิเคราะห์จะดีกว่าถ้าอยู่ใกล้กับตัวแยกวิเคราะห์ HtmlUnit


แก้ไข:

โดยที่ดีที่สุดฉันต้องการคุณสมบัติอย่างน้อยต่อไปนี้:

  1. ความเร็ว
  2. ความง่ายดายในการค้นหา HtmlElement ใด ๆ ด้วย "id" หรือ "name" หรือ "tag type"

มันคงจะโอเคสำหรับฉันถ้ามันไม่ทำความสะอาดโค้ด HTML ที่สกปรก ฉันไม่จำเป็นต้องล้างซอร์ส HTML ใด ๆ ฉันต้องการวิธีที่ง่ายที่สุดในการเคลื่อนย้ายข้าม HtmlElements และเก็บเกี่ยวข้อมูลจากพวกเขา


2
คุณหมายถึง "ดีที่สุด" คุณหมายถึงความเร็วความสะดวกในการเปลี่ยนจากการใช้งานในปัจจุบันการปฏิบัติตามมาตรฐาน W3C อย่างอื่นที่ฉันไม่ได้คิด? คำถามของคุณแสดงถึงความเร็ว แต่ก็หมายถึงเวลาในการเปลี่ยนผ่านการพัฒนาด้วย การชี้แจงบางอย่างอาจช่วยผู้อื่นในการแนะนำตัวแยกวิเคราะห์ที่ดีที่จะตอบสนองความต้องการของคุณได้ดีขึ้น
aperkins

2
คำสั่งของคุณ 'ฉันโค้ดตัวแยกวิเคราะห์จำนวนมาก' ดูเหมือนจะไม่สอดคล้องกับคำถาม คุณหมายถึง 'ฉันต้องใช้โปรแกรมแยกวิเคราะห์ html มากไหม'
ว่าง

11
ฉันคิดว่าคำถามนี้เฉพาะเจาะจงมากพอที่จะได้รับการยกเว้นจากเหตุผลใกล้ชิด "ไม่สร้างสรรค์"
Bill the Lizard

9
โหวตให้เปิดใหม่โปรดได้ มีลักษณะเฉพาะเพียงพอและไม่ควรปิด
AZ_

3
ใช่บางคนต่อสู้กับสงครามศักดิ์สิทธิ์กับสงครามศักดิ์สิทธิ์ของคำถาม "ดีที่สุด" น่ารำคาญมาก. คำตอบการลงคะแนนอย่างชัดเจนบ่งบอกถึงประโยชน์ของคำถามนี้
user1050755

คำตอบ:


396

ปลั๊กด้วยตนเอง: ฉันได้เพียงแค่เปิดตัว parser Java ใหม่ HTML: jsoup ฉันพูดถึงที่นี่เพราะฉันคิดว่ามันจะทำในสิ่งที่คุณเป็น

เคล็ดลับปาร์ตี้มันเป็น CSS ตัวเลือกไวยากรณ์เพื่อค้นหาองค์ประกอบเช่น:

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();

ดูตัวเลือก javadoc สำหรับข้อมูลเพิ่มเติม

นี่เป็นโครงการใหม่ดังนั้นความคิดใด ๆ สำหรับการปรับปรุงยินดีต้อนรับมาก!


15
สิ่งนี้ยอดเยี่ยมมากและฉันชอบการรองรับ CSS selector ฉันเพิ่งรู้ว่าฉันใช้ห้องสมุดจาวา :-)
William Pietri

17
โปรดอย่าหยุดสนับสนุนสิ่งนี้ นี่คือสิ่งที่เราต้องการเพื่อแยกวิเคราะห์ HTML โดยใช้ Java ฝั่งเซิร์ฟเวอร์! นี่มันเจ๋งมาก! ฉันสร้างพร็อกซีในเวลาเพียงไม่กี่ชั่วโมงซึ่งแก้ไขลิงก์ src และ href ทั้งหมดเพื่อให้พา ธ เต็มไปยังเซิร์ฟเวอร์ต้นทาง
jmort253

7
ฉันเพิ่งจะเหลือบมองไปที่มัน ฉันชอบอินเตอร์เฟสและเอกสารประกอบ เข้าใจง่าย :)
emeraldhieu

5
งานที่ดี! เตรียมพร้อม jsoup และทำงานในเวลาน้อยกว่า 10 นาที
Indrek Kõue

10
ไม่น่าเชื่อนี่คือสิ่งที่ป่วยมาก ฉันสามารถประมวลผลหน้า HTML ภายในไม่กี่นาที ขอบคุณมากสำหรับการทำงานที่ยอดเยี่ยมนี้
Michael-O

32

สิ่งที่ดีที่สุดที่ฉันเคยเห็นคือHtmlCleaner :

HtmlCleaner เป็นตัวแยกวิเคราะห์ HTML โอเพนซอร์สที่เขียนใน Java HTML ที่พบบนเว็บมักสกปรกสกปรกรูปแบบไม่เหมาะสมสำหรับการประมวลผลเพิ่มเติม สำหรับการใช้เอกสารดังกล่าวอย่างจริงจังจำเป็นต้องทำความสะอาดก่อนและนำคำสั่งไปยังแท็กคุณลักษณะและข้อความธรรมดา สำหรับเอกสาร HTML ที่ระบุ HtmlCleaner จะทำการจัดลำดับองค์ประกอบใหม่และสร้าง XML ที่มีรูปแบบที่ดี ตามค่าเริ่มต้นจะปฏิบัติตามกฎที่คล้ายกันซึ่งเว็บเบราว์เซอร์ส่วนใหญ่ใช้เพื่อสร้าง Document Object Model อย่างไรก็ตามผู้ใช้อาจระบุแท็กและกฎที่กำหนดเองสำหรับการกรองแท็กและการสร้างสมดุล

ด้วย HtmlCleaner คุณสามารถค้นหาองค์ประกอบใด ๆ โดยใช้ XPath

สำหรับ parsers html อื่น ๆ ดูคำถาม SOนี้


1
คุณต้องจัดการกับพร็อกซี่ด้วยตนเองจากนั้นใช้ HtmlCleaner เพื่อประมวลผลสตรีมของคุณแทน => ไม่สะดวก T__T
kidnan1991

HTMLTidy จะไม่ใช่ตัวเลือกที่ดีกว่าใช่ไหม html-tidy.org
Troy Witthoeft

1
Similar rules that the most of web browsers use- สิ่งนี้ไม่น่าเชื่อมากนัก
pguardiario

9

ฉันขอแนะนำเครื่องมือแยกวิเคราะห์ Validator.nuโดยใช้ขั้นตอนวิธีการแยกวิเคราะห์ HTML5 มันเป็น parser ที่ใช้ใน Mozilla ตั้งแต่ 2010-05-03


2
ฉันลองสิ่งนี้และพบว่ามันใช้งานยากสุด ๆ เอกสาร / การสนับสนุนน้อยมาก
Ryan Shillington
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.