2013-02-19 15 views
8

यह सवाल BeautifulSoup4 के लिए विशिष्ट है, जो इसे पिछले प्रश्न से अलग बनाता है:एक स्व-समापन टैग का सम्मान करने के लिए सुंदर सूप 4 कैसे प्राप्त करें?

Why is BeautifulSoup modifying my self-closing elements?

selfClosingTags in BeautifulSoup

BeautifulStoneSoup के बाद से चला गया है (पिछले XML पार्सर), मैं कैसे bs4 पाने का सम्मान कर सकते हैं एक नया आत्म-बंद टैग? उदाहरण के लिए:

import bs4 
S = '''<foo> <bar a="3"/> </foo>''' 
soup = bs4.BeautifulSoup(S, selfClosingTags=['bar']) 

print soup.prettify() 

bar टैग स्वत: बंद नहीं करता है, लेकिन एक संकेत देता है। यह पेड़ निर्माता क्या है कि बीएस 4 का जिक्र है और मैं टैग को स्व-बंद कैसे करूं?

/usr/local/lib/python2.7/dist-packages/bs4/__init__.py:112: UserWarning: BS4 does not respect the selfClosingTags argument to the BeautifulSoup constructor. The tree builder is responsible for understanding self-closing tags. 
    "BS4 does not respect the selfClosingTags argument to the " 
<html> 
<body> 
    <foo> 
    <bar a="3"> 
    </bar> 
    </foo> 
</body> 
</html> 

उत्तर

12

To parse XML you pass in “xml” as the second argument to the BeautifulSoup constructor.

soup = bs4.BeautifulSoup(S, 'xml') 

You’ll need to have lxml installed.

आप selfClosingTags अब और पारित करने के लिए जरूरत नहीं:

In [1]: import bs4 
In [2]: S = '''<foo> <bar a="3"/> </foo>''' 
In [3]: soup = bs4.BeautifulSoup(S, 'xml') 
In [4]: print soup.prettify() 
<?xml version="1.0" encoding="utf-8"?> 
<foo> 
<bar a="3"/> 
</foo> 
+0

यह 'selfClosingTags' की सूची में उत्तीर्ण होकर काम करता है, लेकिन यह अभी भी उपरोक्त के रूप में एक ही चेतावनी देता है। क्या मुझसे कुछ गलत हो रही है? – Hooked

+0

कभी नहीं, दस्तावेज़ उस प्रश्न का उत्तर देते हैं। ऐसा लगता है कि सामग्री खाली होने पर एक्सएमएल मोड पर एक स्व-समापन टैग स्वचालित रूप से बनाया जाता है और एक सूची पारित नहीं की जानी चाहिए। – Hooked

+0

दाएं। एक प्रदर्शन जोड़ा गया। –

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