2010-06-17 7 views
5

क्या कोई मुझे बता सकता है कि खराब HTML को साफ करने का एक बेहतर तरीका क्या है, तो सुंदर सूप इसे संभाल सकता है - क्या किसी को सुंदर सूप के मालिश विधियों का उपयोग करना चाहिए या नियमित अभिव्यक्तियों का उपयोग करके इसे साफ़ करना चाहिए?BeateifulSoup के साथ मालिश या Regex के साथ साफ

धन्यवाद।

उत्तर

3

सोचा कि मुझे अपना जवाब दोबारा जवाब देना चाहिए।

बिल्ट-इन मालिश हल्के नुकसान के लिए अच्छे हैं (अतिरिक्त सफेद जगह, कोई बंद slashes, आदि)। मैं निश्चित रूप से कोशिश करने और इससे पहले कि इसमें शामिल होने से पहले इन्हें दूर कर दूंगा।

आप pass in your own massages कर सकते हैं और मैं तुम्हें डिफ़ॉल्ट सेट का विस्तार सुझाव है:

import copy, re 

myMassage = [(re.compile('<!-([^-])'), lambda match: '<!--' + match.group(1))] 
myNewMassage = copy.copy(BeautifulSoup.MARKUP_MASSAGE) 
myNewMassage.extend(myMassage) 

BeautifulSoup(badString, markupMassage=myNewMassage) 
# Foo<!--This comment is malformed.-->Bar<br />Baz 

आप शायद बेहतर कर रहे हैं यह इस तरह से कर रही है के रूप में यह सब एक पार्स बर्तन में चला जाता है, BeautifulSoups अनुकूलन प्राप्त कर रहा ... हालांकि रनटाइम प्रदर्शन शायद काफी समान है।

2

the documentation से, मालिश विधियां केवल (regular expression, replacement function) के जोड़े हैं इसलिए मुझे नहीं लगता कि यह वास्तव में उपयोग मालिश या regexps का मामला है।

उदा। विकृत टिप्पणी को साफ़ रखने के लिए:

for fix, m in self.markupMassage: 
    markup = fix.sub(m, markup) 

तो, जबकि:

(re.compile('<!-([^-])'), lambda match: '<!--' + match.group(1)) 

आप BeautifulSoup.py में विधि के स्रोत को देखें, तो आपको लगता है कि ये सिर्फ मार्कअप के खिलाफ अनुक्रम में चलाए जा रहे हैं देखेंगे Oli's उत्तर में दिखाए गए अनुसार डिफॉल्ट बिल्टिन MARKUP_MASSAGE के साथ आवश्यक किसी भी अतिरिक्त टिडींग को संभवतः चिह्नित करने के लिए सुंदर सूप को मार्कअप को देखने के लिए आप अपने आप को कुछ regexp प्रसंस्करण कर सकते हैं।

संबंधित मुद्दे