2011-10-16 16 views
5

जब मैं सुंदर सूप लाइब्रेरी का उपयोग कर पाइथन में एक्सएमएल दस्तावेज़ को पार्स करना चाहता हूं, मुझे कुछ समस्याएं आ रही हैं। एक्सएमएल दस्तावेज़ जिसे मैं पार्स करना चाहता हूं:पार्सिंग गैर मानक एक्सएमएल (सीडीएटीए टैग)

<item> 
<title><![CDATA[Title Sample]]></title> 
<link /><![CDATA[http://banhada.kr/?cateCode=09&viewCode=S0941580]]> 
<time_start>2011-10-10 09:00:00</time_start> 
<time_end>2011-10-17 09:00:00</time_end> 
<price_original>35000</price_original> 
<price_now>20000</price_now> 
</item> 

जैसा कि आप ऊपर देख सकते हैं, टैग थोड़ा अजीब है। मेरी राय में, वह (टैग) स्टैंड एक्सएमएल फॉर्म नहीं है, है ना? मैं इस भयानक रूप को कैसे पार्स कर सकता हूं?

उत्तर

7

आप XML को पार्स करने BeautifulSoup इस्तेमाल कर सकते हैं:

import bs4 as bs 
content='''\ 
<item> 
<title><![CDATA[Title Sample]]></title> 
<link /><![CDATA[http://banhada.kr/?cateCode=09&viewCode=S0941580]]> 
<time_start>2011-10-10 09:00:00</time_start> 
<time_end>2011-10-17 09:00:00</time_end> 
<price_original>35000</price_original> 
<price_now>20000</price_now> 
</item>'''  

soup = bs.BeautifulSoup(content, 'xml') 

title = soup.title 
print(title.string) 
# Title Sample 

link = soup.link.nextSibling 
print(link) 
# http://banhada.kr/?cateCode=09&viewCode=S0941580 

हुड के अंतर्गत, BeautifulSoup XML पार्स करने के लिए lxml उपयोग करता है। हालांकि यह यहाँ की जरूरत नहीं है, तो आप सीधे lxml का उपयोग करना चाहें, क्योंकि यह आप और अधिक संक्षिप्त तरीके XPath का उपयोग कर एक्सएमएल माध्यम से नेविगेट करने देता है:

import lxml.etree as ET 

content='''\ 
<item> 
<title><![CDATA[Title Sample]]></title> 
<link /><![CDATA[http://banhada.kr/?cateCode=09&viewCode=S0941580]]> 
<time_start>2011-10-10 09:00:00</time_start> 
<time_end>2011-10-17 09:00:00</time_end> 
<price_original>35000</price_original> 
<price_now>20000</price_now> 
</item>'''  

doc = ET.fromstring(content) 

title = doc.find('title') 
print(title.text) 
# Title Sample 

link = doc.find('link') 
print(link.tail) 
# http://banhada.kr/?cateCode=09&viewCode=S0941580 
+0

वाह। आपकी कंडनेस – user513004

+1

उपयोगकर्ता चेतावनी के लिए धन्यवाद: सुंदरस्टोन सूप क्लास को बहिष्कृत किया गया है। इसका उपयोग करने के बजाय, सुंदर सूप कन्स्ट्रक्टर में विशेषताएं = "xml" पास करें। –

+0

सुंदरसूप 4 का उपयोग करने के लिए मेरा उत्तर अपडेट किया गया। – unutbu

7

आप BeautifulStoneSoup या lxml जरूरत नहीं है। पाइथन की बैटरी शामिल है, यह काम ठीक है, और ऐसा लगता है कि आपके एक्सएमएल के बारे में कुछ भी अनुपालन नहीं करता है।

>>> content='''\ 
... <item> 
... <title><![CDATA[Title Sample]]></title> 
... <link /><![CDATA[http://banhada.kr/?cateCode=09&viewCode=S0941580]]> 
... <time_start>2011-10-10 09:00:00</time_start> 
... <time_end>2011-10-17 09:00:00</time_end> 
... <price_original>35000</price_original> 
... <price_now>20000</price_now> 
... </item>''' 
>>> import xml.etree.cElementTree as et 
>>> foo = et.XML(content) 
>>> for e in foo: 
...  print e.tag, e.text, repr(e.tail) 
... 
title Title Sample '\n' 
link None 'http://banhada.kr/?cateCode=09&viewCode=S0941580\n' 
time_start 2011-10-10 09:00:00 '\n' 
time_end 2011-10-17 09:00:00 '\n' 
price_original 35000 '\n' 
price_now 20000 '\n' 
>>> 
+0

यह मेरे लिए एक्सएमएल पर काम करता है कि सुंदर सूप संभाल नहीं सकता! – jsh

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