簡體   English   中英

如何使用python BeautifulSoup提取XML文本?

[英]How can I extract XML text using python BeautifulSoup?

我正在嘗試從Folger Library Shakespeare TEI XML版本中提取對話框。 典型的對話框如下所示:

<sp xml:id="sp-0024" who="#HORATIO">
<speaker xml:id="spk-0024">
<w xml:id="w0003030">HORATIO</w>
</speaker>
<ab xml:id="ab-0024">
<join type="line" xml:id="ftln-0024" n="1.1.24" ana="#short" target="#w0003040 #c0003050 #w0003060 #c0003070 #w0003080 #c0003090 #w0003100 #p0003110"/>
<w xml:id="w0003040" n="1.1.24">A</w>
<c xml:id="c0003050" n="1.1.24"> </c>
<w xml:id="w0003060" n="1.1.24">piece</w>
<c xml:id="c0003070" n="1.1.24"> </c>
<w xml:id="w0003080" n="1.1.24">of</w>
<c xml:id="c0003090" n="1.1.24"> </c>
<w xml:id="w0003100" n="1.1.24">him</w>
<pc xml:id="p0003110" n="1.1.24">.</pc>
</ab>
</sp>

我基本上想要得到如下輸出:['Horatio','A a他的一塊。']但對於特定角色的所有對話框。 換句話說,我希望能夠輸入Folger Shakespeare TEI XML文件並輸出gertrude.txt和horatio.txt之類的文件,每個文件都包含從該特定字符收集的所有對話框。

我可以通過soup.find_all(who=u'#GERTRUDE')來獲得特定揚聲器的所有對話/舞台方向等,但隨后我似乎無法對結果做任何其他事情,例如進一步深入研究,獲得標簽之間的文本等,而無需再次重新解析數據。 這是發生了什么:

>>> gertrude=soup.find_all(who=u'#GERTRUDE')
>>> gertrude.w
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'ResultSet' object has no attribute 'w'
>>> gertrude.get_text()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'ResultSet' object has no attribute 'get_text'

BeautifulSoup的.find_all()方法返回ResultSet對象,這是一種特殊的列表。 您有0個或多個匹配項,您需要遍歷該結果集或使用索引來獲取結果集中包含的各個元素:

for speaker in soup.find_all(who=u'#GERTRUDE'):

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM