संक्षेप में, lxml
को बिजली-तेज उत्पादन-गुणवत्ता वाले एचटीएमएल और एक्सएमएल पार्सर के रूप में स्थित किया गया है, वैसे भी, इसमें सुंदरता की कार्यक्षमता पर वापस आने के लिए soupparser
मॉड्यूल भी शामिल है। BeautifulSoup
एक व्यक्ति परियोजना है, जो आपको खराब तरीके से बनाए गए एचटीएमएल या एक्सएमएल से डेटा निकालने के लिए समय बचाने के लिए डिज़ाइन की गई है।
lxml documentation कहता है कि दोनों पार्सर्स के पास फायदे और नुकसान हैं। इस कारण से, lxml
soupparser
प्रदान करता है ताकि आप आगे और पीछे स्विच कर सकें। उद्धरण,
सुंदर सूप एक अलग पार्सिंग दृष्टिकोण का उपयोग करता है। यह वास्तविक HTML पार्सर नहीं है लेकिन टैग सूप के माध्यम से गोता लगाने के लिए नियमित अभिव्यक्तियों का उपयोग करता है। यह इसलिए कुछ मामलों में अधिक क्षमाशील और दूसरों में कम अच्छा है। यह असामान्य नहीं है कि lxml/libxml2 पार्स और टूटी हुई एचटीएमएल बेहतर, फिक्स करता है लेकिन सुंदर सूप में एन्कोडिंग पहचान के लिए अत्यधिक समर्थन है। यह बहुत अधिक इनपुट पर निर्भर करता है जो पार्सर बेहतर काम करता है।
अंत वे कह रहे हैं में,
इस पार्सर का उपयोग करने का नकारात्मक पक्ष यह है कि यह है से lxml के HTML पार्सर बहुत धीमी है। तो यदि प्रदर्शन महत्वपूर्ण है, तो आप कुछ मामलों के लिए फॉलबैक के रूप में केवल Soupparser का उपयोग करने पर विचार करने के लिए चाहते हैं।
अगर मैं उन्हें सही ढंग से समझते हैं, इसका मतलब है कि सूप पार्सर --- और अधिक मजबूत है --- यह एक नियमित अभिव्यक्ति का उपयोग करके विकृत टैग की "सूप" के साथ सौदा कर सकते हैं, जबकि lxml
और अधिक सरल है और सिर्फ चीजों को पारदर्शी करता है और एक पेड़ बनाता है जैसा आप उम्मीद करेंगे। मुझे लगता है कि के लिए soupparser
पर न केवल BeautifulSoup
पर भी लागू होता है।
उन्होंने यह भी कैसे, BeautifulSoup
की एन्कोडिंग पहचान से लाभ प्राप्त करने, जबकि अभी भी lxml
साथ जल्दी से पार्स करने दिखाने:
>>> from BeautifulSoup import UnicodeDammit
>>> def decode_html(html_string):
... converted = UnicodeDammit(html_string, isHTML=True)
... if not converted.unicode:
... raise UnicodeDecodeError(
... "Failed to detect encoding, tried [%s]",
... ', '.join(converted.triedEncodings))
... # print converted.originalEncoding
... return converted.unicode
>>> root = lxml.html.fromstring(decode_html(tag_soup))
(एक ही स्रोत: http://lxml.de/elementsoup.html)।
BeautifulSoup
के निर्माता के शब्दों में,
यह है कि! मज़े करो! मैंने हर समय बचाने के लिए सुंदर सूप लिखा था। एक बार जब आप इसका उपयोग कर लेंगे, तो आपको कुछ ही मिनटों में खराब-डिज़ाइन की गई वेबसाइटों से डेटा को घुमाने में सक्षम होना चाहिए। अगर आपको कोई टिप्पणी है, तो समस्याएं चलाएं, या मुझे अपने सूअर सूप का उपयोग करने वाले प्रोजेक्ट के बारे में जानना चाहते हैं तो मुझे ईमेल भेजें।
--Leonard
Beautiful Soup documentation से उद्धरित।
मुझे उम्मीद है कि यह अब स्पष्ट है। सूप एक शानदार एक व्यक्ति परियोजना है जो आपको खराब तरीके से डिज़ाइन की गई वेबसाइटों से डेटा निकालने के लिए समय बचाने के लिए डिज़ाइन की गई है।लक्ष्य आपको अभी समय बचाने के लिए है, नौकरी पाने के लिए, आपको लंबे समय तक समय बचाने के लिए जरूरी नहीं है, और निश्चित रूप से अपने सॉफ्टवेयर के प्रदर्शन को अनुकूलित नहीं करना है।
इसके अलावा
, lxml website से,
lxml की तुलना में अधिक दो लाख बार अजगर पैकेज सूचकांक से डाउनलोड किया गया है और कई पैकेज वितरण, उदा सीधे भी उपलब्ध है लिनक्स या मैकोज़-एक्स के लिए।
और, Why lxml? से,
सी पुस्तकालयों libxml2 और libxslt विशाल फायदे हैं: ... मानक अनुरूप ... पूर्ण विशेषताओं ... तेजी से। तेजी से! फास्ट! ... lxml एक नया अजगर libxml2 के लिए बंधन और libxslt ...
संभव डुप्लिकेट (http://stackoverflow.com/questions/4967103/beautifulsoup-and-lxml- एचटीएमएल-क्या-पसंद करते हैं) मैंने एक [विस्तृत उत्तर] लिखा है (http://stackoverflow.com/a/19548832/1243926); इसे यहां दोबारा पोस्ट किया गया क्योंकि सवाल डुप्लिकेट है। – osa
क्षमा करें, मेरा मतलब दूसरे को बंद करना था। अब दूसरे को ध्वजांकित किया। मैंने सोचा कि इससे कोई फर्क नहीं पड़ता कि ध्वज को बढ़ाने के लिए, पुराने में या नए में। – osa