HTML-parser บน Node.js [ปิด]


198

มีอะไรที่เหมือนกับnokogiriของรูบี้บน nodejs ไหม? ฉันหมายถึง HTML-parser ที่ใช้งานง่าย

ฉันเห็นในโมดูล Node.js หน้าตัวแยกวิเคราะห์บางอย่าง แต่ฉันไม่สามารถหาสิ่งที่สวยและสดใหม่


3
คุณหมายถึงอะไร "มิตร"? สะดวกในการทำงานและเลือกโหนดด้วยเช่น XPath และ CSS selector ของ Nokogiri รองรับหรือไม่ คล้อยตามการแยก "แท็กซุป" HTML ที่ไม่ถูกต้อง?
Phrogz

หากคุณพอใจกับ jQuery ให้พิจารณาคำตอบนี้
Lucio Paiva

คำตอบ:


446

หากคุณต้องการที่จะสร้างDOMคุณสามารถใช้jsdom

นอกจากนี้ยังมีcheerioมีส่วนต่อประสานjQueryและเร็วกว่ารุ่นเก่าของ jsdom ถึงแม้ว่าทุกวันนี้ประสิทธิภาพจะคล้ายกัน

คุณอาจต้องการดูhtmlparser2ซึ่งเป็น parser แบบสตรีมและตามเกณฑ์มาตรฐานดูเหมือนว่าจะเร็วกว่าตัวอื่น ๆ และไม่มี DOM เป็นค่าเริ่มต้น มันยังสามารถสร้าง DOM ได้เนื่องจากมันยังรวมกับตัวจัดการที่สร้าง DOM นี่คือตัวแยกวิเคราะห์ที่ใช้โดย cheerio

parse5ยังดูเหมือนเป็นทางออกที่ดี มันเป็นงานอย่างเป็นธรรม (11 วันนับจากวันสุดท้ายกระทำในฐานะของการปรับปรุงนี้) WHATWG ที่สอดคล้องและถูกนำมาใช้ในjsdom , เชิงมุมและพอลิเมอ

และถ้าคุณต้องการที่จะแยก HTML สำหรับขูดเว็บคุณสามารถใช้YQL 1 มีโมดูลโหนดสำหรับมัน YQL ฉันคิดว่าจะเป็นทางออกที่ดีที่สุดหาก HTML ของคุณมาจากเว็บไซต์คงที่เนื่องจากคุณพึ่งพาบริการไม่ใช่รหัสของคุณและกำลังการประมวลผล แม้ว่าจะทราบว่ามันจะไม่ทำงานหากหน้าไม่ได้รับอนุญาตจาก robots.txt ของเว็บไซต์ YQL จะไม่ทำงาน

หากเว็บไซต์ที่คุณกำลังพยายามที่จะขูดเป็นแบบไดนามิกแล้วคุณควรจะใช้เบราว์เซอร์หัวขาดเช่นphantomjs นอกจากนี้ยังมีการดูcasperjsหากคุณกำลังพิจารณา phantomjs และคุณสามารถควบคุม casperjs จากโหนดกับSpookyJS

ข้าง phantomjs มีzombiejs ซึ่งแตกต่างจาก phantomjs ที่ไม่สามารถฝังตัวใน nodejs zombiejs เป็นเพียงโมดูลโหนด

มีnettuts + toturialสำหรับการแก้ปัญหาหลัง


1ตั้งแต่สิงหาคม 2014 ห้องสมุด YUI ซึ่งเป็นข้อกำหนดสำหรับ YQL จะไม่ได้รับการบำรุงรักษาแหล่งที่มาอีกต่อไป


1
คุณสามารถรับ DOM จาก htmlparser2 โดยใช้โมดูล DomHandler (รวมกับ htmlparser2) มีการแยกวัตถุประสงค์เพื่อให้การประมวลผล HTML ประเภทอื่นโดยไม่มีค่าใช้จ่ายในการสร้าง DOM
esp

@esp ขอบคุณก่อนที่ฉันคิดว่ามันเป็น DOM ที่ไม่ได้มาตรฐานฉันเปลี่ยนหัวข้อนั้นตามนั้น
Farid Nouri Neshat

ฉันไม่แน่ใจว่าคุณใช้ YQL อย่างไรในการรวบรวมข้อมูลเป็นมากกว่าการเข้าร่วมผลการบริการเว็บที่ไม่ประมวลผลมาร์กอัป
dardenfall

@devil คุณถูกต้องการรวบรวมข้อมูลไม่ใช่คำที่ถูกต้อง ฉันเปลี่ยนมันด้วยการขูด :)
Farid Nouri Neshat

@Farid - (อาจทำให้คุณสับสนถ้าฉันทำได้) ที่มีความเสี่ยงในการโต้วาทีในความคิดเห็น (ขออภัย!) ฉันยังไม่เห็นว่าคุณใช้มันอย่างไรในการคัดลอก มันทำงานร่วมกับบริการเว็บไซต์ไม่ใช่เว็บไซต์และกับบริการคุณไม่ค่อยแยกวิเคราะห์ HTML อาจเป็น xml แต่ไม่ใช่ html
dardenfall


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