คำถามติดแท็ก html-parsing


30
ตัวเลือกสำหรับการขูด HTML หรือไม่ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันกำลังคิดว่าจะลองBeautiful Soupซึ่งเป็นแพ็คเกจ Python สำหรับการขูด HTML มีแพ็คเกจการขูด HTML อื่น ๆ ที่ฉันควรจะดูหรือไม่ Python ไม่ใช่ข้อกำหนดฉันสนใจที่จะฟังเกี่ยวกับภาษาอื่นเช่นกัน เรื่องราวที่ผ่านมา: หลาม ซุปที่สวยงาม lxml HTQL Scrapy เปลี่ยนไปใช้เครื่องจักร ทับทิม Nokogiri hpricot เปลี่ยนไปใช้เครื่องจักร scrAPI scRUBYt! Wombat Watir .สุทธิ ชุดความคล่องตัว Html WatiN Perl WWW :: ใช้เครื่องจักร เว็บ Scraper ชวา แท็กซุป HtmlUnit เว็บเก็บเกี่ยว jARVEST jsoup …

9
แยกสตริง HTML ด้วย JS
ฉันค้นหาวิธีแก้ปัญหา แต่ไม่มีอะไรเกี่ยวข้องดังนั้นนี่คือปัญหาของฉัน: ฉันต้องการแยกสตริงที่มีข้อความ HTML ฉันต้องการที่จะทำใน JavaScript ฉันลองใช้ห้องสมุดนี้แต่ดูเหมือนว่ามันจะแยกวิเคราะห์ HTML ของหน้าปัจจุบันของฉันไม่ใช่จากสตริง เพราะเมื่อฉันลองโค้ดด้านล่างมันจะเปลี่ยนชื่อหน้าของฉัน: var parser = new HTMLtoDOM("<html><head><title>titleTest</title></head><body><a href='test0'>test01</a><a href='test1'>test02</a><a href='test2'>test03</a></body></html>", document); เป้าหมายของฉันคือการแยกลิงค์จากหน้าภายนอก HTML ที่ฉันอ่านเหมือนกับสตริง คุณรู้จัก API ที่จะทำหรือไม่?

18
ใช้การแสดงออกปกติเพื่อแยก HTML: ทำไมไม่?
ดูเหมือนว่าทุกคำถามใน stackoverflow ที่ผู้ถามใช้ regex เพื่อดึงข้อมูลบางอย่างจาก HTML อย่างหลีกเลี่ยงไม่ได้จะมี "คำตอบ" ที่บอกว่าจะไม่ใช้ regex ในการแยกวิเคราะห์ HTML ทำไมจะไม่ล่ะ? ฉันทราบว่ามีตัวแยกวิเคราะห์ HTML "ของจริง" ที่อ้างถึงออกมาเช่นBeautiful Soupและฉันมั่นใจว่ามันมีประสิทธิภาพและมีประโยชน์ แต่ถ้าคุณเพิ่งทำสิ่งที่ง่ายรวดเร็วหรือสกปรกแล้วทำไม รบกวนการใช้สิ่งที่ซับซ้อนมากเมื่องบ regex ไม่กี่จะทำงานได้ดี? ยิ่งไปกว่านั้นมีบางสิ่งพื้นฐานที่ฉันไม่เข้าใจเกี่ยวกับ regex ที่ทำให้พวกเขาเป็นตัวเลือกที่ไม่ดีสำหรับการแยกวิเคราะห์โดยทั่วไปหรือไม่?

3
HTML Parser ใดที่ดีที่สุด [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันโค้ดตัวแยกวิเคราะห์จำนวนมาก จนถึงตอนนี้ฉันใช้ HtmlUnit เบราว์เซอร์ที่ไม่มีส่วนหัวสำหรับการแยกวิเคราะห์และการทำงานอัตโนมัติของเบราว์เซอร์ ตอนนี้ฉันต้องการแยกงานทั้งสองออก เนื่องจาก 80% ของงานของฉันเกี่ยวข้องกับการแยกวิเคราะห์ฉันต้องการใช้ตัวแยกวิเคราะห์ HTML แบบใช้แสงเนื่องจากใช้เวลานานใน HtmlUnit ในการโหลดหน้าเว็บครั้งแรกจากนั้นรับแหล่งที่มาและแยกวิเคราะห์ ฉันอยากรู้ว่าตัวแยกวิเคราะห์ HTML ตัวใดดีที่สุด ตัวแยกวิเคราะห์จะดีกว่าถ้าอยู่ใกล้กับตัวแยกวิเคราะห์ HtmlUnit แก้ไข: โดยที่ดีที่สุดฉันต้องการคุณสมบัติอย่างน้อยต่อไปนี้: ความเร็ว ความง่ายดายในการค้นหา HtmlElement ใด ๆ ด้วย "id" หรือ "name" หรือ "tag type" มันคงจะโอเคสำหรับฉันถ้ามันไม่ทำความสะอาดโค้ด HTML ที่สกปรก ฉันไม่จำเป็นต้องล้างซอร์ส HTML ใด ๆ ฉันต้องการวิธีที่ง่ายที่สุดในการเคลื่อนย้ายข้าม HtmlElements และเก็บเกี่ยวข้อมูลจากพวกเขา

7
การแยก HTML โดยใช้ Python
ฉันกำลังมองหาโมดูล HTML Parser สำหรับ Python ที่สามารถช่วยให้ฉันได้รับแท็กในรูปแบบของรายการ / พจนานุกรม / วัตถุ Python ถ้าฉันมีเอกสารของแบบฟอร์ม: <html> <head>Heading</head> <body attr1='val1'> <div class='container'> <div id='class'>Something here</div> <div>Something else</div> </div> </body> </html> จากนั้นควรให้วิธีเข้าถึงแท็กที่ซ้อนกันผ่านชื่อหรือรหัสของแท็ก HTML เพื่อให้ฉันสามารถขอให้ฉันรับเนื้อหา / ข้อความในdivแท็กที่มีclass='container'อยู่ภายในbodyแท็กหรือสิ่งที่คล้ายกัน หากคุณใช้ฟีเจอร์ "ตรวจสอบองค์ประกอบ" ของ Firefox (ดู HTML) คุณจะรู้ว่ามันให้แท็กทั้งหมดในลักษณะซ้อนกันอย่างดีเช่นต้นไม้ ฉันต้องการโมดูลในตัว แต่อาจจะขอมากไปหน่อย ฉันได้อ่านคำถามมากมายเกี่ยวกับ Stack Overflow และบล็อกบางส่วนบนอินเทอร์เน็ตและส่วนใหญ่แนะนำให้ BeautifulSoup หรือ lxml หรือ HTMLParser แต่รายละเอียดเหล่านี้มีเพียงเล็กน้อยและจบลงด้วยการอภิปรายว่าอันไหนเร็วกว่ากัน


5
HTML parses ทำงานอย่างไรหากไม่ได้ใช้ regexp
ฉันเห็นคำถามทุกวันเพื่อถามวิธีแยกวิเคราะห์หรือดึงข้อมูลบางอย่างจากสตริง HTML และคำตอบ / ความคิดเห็นแรกคือ "อย่าใช้ RegEx เพื่อแยกวิเคราะห์ HTML เกรงว่าคุณจะรู้สึกโกรธ!" (บางครั้งส่วนสุดท้ายจะถูกละไว้) สิ่งนี้ค่อนข้างสับสนสำหรับฉันฉันคิดเสมอว่าโดยทั่วไปวิธีที่ดีที่สุดในการแยกวิเคราะห์สตริงที่ซับซ้อนคือการใช้นิพจน์ทั่วไป โปรแกรมแยกวิเคราะห์ HTML ทำงานอย่างไร? มันไม่ใช้นิพจน์ทั่วไปในการแยกวิเคราะห์ อาร์กิวเมนต์เฉพาะสำหรับการใช้นิพจน์ทั่วไปคือไม่มีทางเลือกในการแยกวิเคราะห์เสมอไป (เช่น JavaScript โดยที่ DOMDocument ไม่ใช่ตัวเลือกที่ใช้ได้ทั่วไป) ตัวอย่างเช่น jQuery ดูเหมือนจะจัดการได้ดีโดยใช้ regex เพื่อแปลงสตริง HTML เป็นโหนด DOM ไม่แน่ใจว่า CW หรือไม่นี่เป็นคำถามที่แท้จริงที่ฉันต้องการคำตอบและไม่ได้ตั้งใจให้เป็นกระทู้สนทนา

5
ฉันจะแยกวิเคราะห์หน้า HTML ด้วย Node.js ได้อย่างไร
ฉันต้องการแยกวิเคราะห์หน้า HTML จำนวนมาก (ฝั่งเซิร์ฟเวอร์) เราทุกคนยอมรับว่า regexp ไม่ใช่วิธีที่จะไปที่นี่ สำหรับฉันแล้วดูเหมือนว่าจาวาสคริปต์เป็นวิธีดั้งเดิมในการแยกวิเคราะห์หน้า HTML แต่สมมติฐานนั้นอาศัยโค้ดฝั่งเซิร์ฟเวอร์ที่มีจาวาสคริปต์ความสามารถ DOM ทั้งหมดที่มีอยู่ในเบราว์เซอร์ Node.js มีความสามารถในตัวหรือไม่ มีแนวทางที่ดีกว่าสำหรับปัญหานี้หรือไม่โดยแยกวิเคราะห์ HTML ทางฝั่งเซิร์ฟเวอร์

8
วิธีการแยกสตริงตามรูปแบบด้วย grep, regex หรือ perl
ฉันมีไฟล์ที่มีลักษณะดังนี้: <table name="content_analyzer" primary-key="id"> <type="global" /> </table> <table name="content_analyzer2" primary-key="id"> <type="global" /> </table> <table name="content_analyzer_items" primary-key="id"> <type="global" /> </table> ฉันต้องการที่จะดึงอะไรที่อยู่ในคำพูดที่ว่าต่อไปนี้name=คือcontent_analyzer, และcontent_analyzer2content_analyzer_items ฉันกำลังทำสิ่งนี้บนกล่อง Linux ดังนั้นวิธีแก้ปัญหาโดยใช้ sed, perl, grep หรือ bash ก็ใช้ได้

8
วิธีทำให้ HTML ปกติใน JavaScript หรือ jQuery
แท็กสามารถมีหลายแอตทริบิวต์ ลำดับที่แอตทริบิวต์ปรากฏในโค้ดไม่สำคัญ ตัวอย่างเช่น: <a href="#" title="#"> <a title="#" href="#"> ฉันจะ "ทำให้ HTML เป็นปกติ" ใน Javascript ได้อย่างไรดังนั้นลำดับของแอตทริบิวต์จึงเหมือนกันเสมอ ฉันไม่สนใจว่าจะเลือกคำสั่งไหนตราบใดที่ยังคงเหมือนเดิม UPDATE : เป้าหมายเดิมของฉันคือทำให้หน้า HTML 2 หน้าแตกต่างกัน (ใน JavaScript) ได้ง่ายขึ้นโดยมีความแตกต่างเล็กน้อย เนื่องจากผู้ใช้สามารถใช้ซอฟต์แวร์อื่นเพื่อแก้ไขโค้ดลำดับของแอตทริบิวต์จึงอาจเปลี่ยนแปลงได้ สิ่งนี้ทำให้ความแตกต่างมากเกินไป คำตอบ : ก่อนอื่นขอขอบคุณสำหรับคำตอบทั้งหมด และใช่มันเป็นไปได้ นี่คือวิธีที่ฉันจัดการได้ นี่เป็นข้อพิสูจน์ของแนวคิดซึ่งสามารถปรับให้เหมาะสมได้อย่างแน่นอน: function sort_attributes(a, b) { if( a.name == b.name) { return 0; } return (a.name < b.name) …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.