2009-03-19 10 views
12

किसी अजगर में एक आसान तरीका एक सामान्य स्ट्रिंग (जैसे < &) के लिए HTML इकाई कोड (जैसे &lt;&amp;) के साथ एक स्ट्रिंग परिवर्तित करने के लिए पता है पाठ के लिए?HTML इकाई कोड

cgi.escape() स्ट्रिंग्स (खराब) से बच जाएगा, लेकिन unescape() नहीं है।

उत्तर

37

HTMLParser मानक पुस्तकालय में कार्यक्षमता है। यह है, दुर्भाग्य से, undocumented:

(को Python2 Docs)

>>> import HTMLParser 
>>> h= HTMLParser.HTMLParser() 
>>> h.unescape('alpha &lt; &beta;') 
u'alpha < \u03b2' 

(अजगर 3 Docs)

>>> import html.parser 
>>> h = html.parser.HTMLParser() 
>>> h.unescape('alpha &lt; &beta;') 
'alpha < \u03b2' 

htmlentitydefs प्रलेखित है, लेकिन काम अपने आप का एक बहुत कुछ करने के लिए आप की आवश्यकता है।

यदि आपको केवल एक्सएमएल पूर्वनिर्धारित इकाइयों (लेफ्टिनेंट, gt, amp, quot, apos) की आवश्यकता है, तो आप उन्हें पार्स करने के लिए मिनीडॉम का उपयोग कर सकते हैं। यदि आपको केवल पूर्वनिर्धारित इकाइयों और कोई संख्यात्मक चरित्र संदर्भों की आवश्यकता नहीं है, तो आप गति के लिए केवल एक पुरानी पुरानी स्ट्रिंग को प्रतिस्थापित कर सकते हैं।

+1

+1 मुझे नहीं पता था कि HTMLParser – vartec

+2

का फ़ंक्शन मानक लाइब्रेरी से एक दस्तावेज़ित फ़ंक्शन है जो बच निकले HTML कोड को सामान्य स्ट्रिंग में परिवर्तित करेगा: http://docs.python.org/library/xml.sax। utils.html # xml.sax.saxutils.unescape –

+0

पायथन 3.4 में, [दस्तावेज] [https://docs.python.org/3/library/html.html#html.unescape) था। – 9000

1

पाइथन stdlib में अनसुलझा एचटीएमएल में कुछ भी नहीं बनाया गया है, लेकिन एक छोटी सी स्क्रिप्ट है जिसे आप http://www.w3.org/QA/2008/04/unescape-html-entities-python पर अपनी आवश्यकताओं के अनुरूप बना सकते हैं। एचटीएमएल।

1

htmlentitydefs मॉड्यूल का उपयोग करें। यह मेरे पुराने कोड है, यह काम किया, लेकिन मुझे यकीन है कि वहाँ यह करने के लिए स्पष्ट और अधिक pythonic तरीका है कर रहा हूँ:

e2c = dict(('&%s;'%k,eval("u'\\u%04x'"%v)) for k, v in htmlentitydefs.name2codepoint.items()) 
12

मैं पहली बार में यह टैग करने के लिए भूल गया, लेकिन मैं BeautifulSoup उपयोग कर रहा हूँ।

दस्तावेज में चारों ओर खुदाई, मैंने पाया:

soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES) 

यह वास्तव में करता है के रूप में मुझे उम्मीद थी।

+4

यह केवल सुंदर सूप संस्करण प्री-बीएस 4 के लिए काम करता है। यदि आप बीएस 4 का उपयोग कर रहे हैं, तो आपको एक फॉर्मेटर का उपयोग करना होगा: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#output-formatters – kronion

+2

यह & के लिए काम नहीं करता है, असल में, अगर किसी स्ट्रिंग में '&' , सुंदर सूप इसे वापस & में परिवर्तित करता है, जो कि मैं उम्मीद कर रहा था के विपरीत है। –

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