2010-05-06 9 views
32

में एचटीएमएल पार्स करने के लिए पैकेज में बनाया गया है, मुझे xml के लिए sax और xml.minidom के लिए HTMLParser मिला। मेरे पास एक अच्छी तरह से गठित एचटीएमएल है इसलिए मुझे एक बहुत मजबूत पार्सर की आवश्यकता नहीं है - कोई सुझाव?पायथन: क्या डोम

उत्तर

11

BeautifulSoup पर एक नज़र डालें। एचटीएमएल पार्सिंग में यह लोकप्रिय और उत्कृष्ट है।

+4

यह में बनाया नहीं है अगर मैं गलत – Guy

+4

नहीं, यह नहीं है में निर्मित नहीं कर रहा हूँ। लेकिन आप आसानी से easy_install का उपयोग करके इसे इंस्टॉल कर सकते हैं या बस वेबसाइट से डाउनलोड कर सकते हैं और PythonPATH में डाल सकते हैं। पूरे सुंदर सूप एक फ़ाइल में निहित है, इसलिए यह एक बोझ नहीं है। – Bartosz

+0

सुंदर सूप को गंदे HTML को पार्स करना है जो "बहुत अच्छी तरह से गठित" नहीं है। – tbz

25

मैं lxml की अनुशंसा करता हूं। मुझे सुंदर सूप पसंद है, लेकिन बाद में रिलीज के साथ आमतौर पर रखरखाव के मुद्दे और संगतता मुद्दे हैं। मैं lxml का उपयोग कर खुश हूँ।


बाद में: सबसे अच्छा सिफारिशों lxml, html5lib, या BeautifulSoup 3.0.8 उपयोग करने के लिए कर रहे हैं। सुंदर सूप 3.1.x पाइथन 3.x के लिए है और पहले पाइथन संस्करणों, as noted on the BeautifulSoup website के साथ समस्याएं ज्ञात हैं।

इयान बाइकिंग में 0xहै lxml का उपयोग करने पर।

एलिमेंटट्री एक और सिफारिश है, लेकिन मैंने इसका कभी भी उपयोग नहीं किया है।


2012-01-18: किसी ने आकर मुझसे और बार्तोज़ downvote क्योंकि हम अजगर पैकेज है कि आसानी से प्राप्त कर रहे हैं, लेकिन अजगर वितरण का हिस्सा नहीं की सिफारिश का फैसला किया है। तो अत्यधिक शाब्दिक स्टैक ओवरफ्लॉवर के लिए: "आप xml.dom.minidom का उपयोग कर सकते हैं, लेकिन विकल्पों में से कोई भी इसकी सिफारिश नहीं करेगा।"

+1

इसके लायक होने के लिए, मैंने एलिमेंट ट्री और एक्सएमएल मिनीडॉम दोनों का उपयोग करके कुछ HTML को पार्स करने का प्रयास किया, और दोनों स्क्रिप्ट टैग (जावास्क्रिप्ट) में पार्स त्रुटियों के साथ दबाए गए! – Michael

+0

मैंने अभी xml.dom.minidom के एक कामकाजी उदाहरण के साथ एक उत्तर जोड़ा है। कुछ परिस्थितियों में, बाहरी मॉड्यूल स्थापित करना बोझिल या असंभव है। इसके अलावा मूल प्रश्न पूछा गया है। – velotron

1

डीओएम ऑब्जेक्ट्स को संभालने के लिए, आप पाइथन के लिए HTMLDOM का उपयोग कर सकते हैं।

9

सुंदर सूप और एलएक्सएमएल बहुत अच्छे हैं, लेकिन सवाल यहां निर्मित नहीं हैं क्योंकि सवाल बिल्टिन के बारे में है। एचटीएमएल स्ट्रिंग को पार्स करने के लिए बिल्टिन minidom मॉड्यूल का उपयोग करने का एक उदाहरण यहां दिया गया है। CPython 3.5.2 के साथ परीक्षण किया गया:

from xml.dom.minidom import parseString 

html_string = """ 
<!DOCTYPE html> 
<html><head><title>title</title></head><body><p>test</p></body></html> 
""" 

# extract the text value of the document's <p> tag: 
doc = parseString(html_string) 
paragraph = doc.getElementsByTagName("p")[0] 
content = paragraph.firstChild.data 

print(content) 
संबंधित मुद्दे