2017-02-16 7 views
1

Ich habe Tweets in einer XML-Datei gespeichert als:Lesen CDATA aus XML-Datei mit BeautifulSoup

<tweet> 
    <tweetid>142389495503925248</tweetid> 
    <user>ccifuentes</user> 
    <content><![CDATA[Salgo de #VeoTV , que día más largoooooo...]]></content> 
    <date>2011-12-02T00:47:55</date> 
    <lang>es</lang> 
    <sentiments> 
    <polarity><value>NONE</value><type>AGREEMENT</type></polarity> 
    </sentiments> 
    <topics> 
    <topic>otros</topic> 
    </topics> 
</tweet> 

diese zu analysieren, ich über

soup = BeautifulSoup(xml, "lxml") 
eine BeautifulSoup Instanz erstellt

wo xml die rohen XML ist Datei. Um einen einzelnen tweet greift ich dies tat:

tweets = soup.find_all('tweet') 
for tw in tweets: 
    print(tw) 
    break 

Dies führt zu

<tweet> 
<tweetid>142389495503925248</tweetid> 
<user>ccifuentes</user> 
<content></content> 
<date>2011-12-02T00:47:55</date> 
<lang>es</lang> 
<sentiments> 
<polarity><value>NONE</value><type>AGREEMENT</type></polarity> 
</sentiments> 
<topics> 
<topic>otros</topic> 
</topics> 
</tweet> 

Beachten Sie, dass der CDATA Teil weggelassen wurde, als ich den ersten Tweet gedruckt. Es ist wichtig, dass ich es bekomme, wie kann ich das machen?

Antwort

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

Änderung der Parser zu xml

aus:

<content>Salgo de #VeoTV , que día más largoooooo...</content> 

OR html.parser:

soup = bs4.BeautifulSoup(xml, 'html.parser') 

aus:

<content><![CDATA[Salgo de #VeoTV , que día más largoooooo...]]></content> 
+0

Prost, was ist der Hauptunterschied zwischen den Parsern? –

+1

@Vladimir Vargas verschiedene Parser in einigen Teilen des Datentyps anders verhalten, in den meisten Fällen sind sie alle gleich. –

+1

Ja, ich konnte es wegen eines Zeitlimits nicht akzeptieren. –