我試圖解析一個XML文件,它充滿了來自報紙的文章,將其保存爲JSON格式,將其保存爲列表,然後使用elasticsearch
對其進行批量索引。從每篇文章中,我想知道它的發佈日期,文章類型(廣告,正常文章等)及其標題和內容。我遇到的問題是,我無法將文章的標題與其內容分開。用BeautifulSoup解析XML
的文章之一的示例如下所示:
<pm:KBroot xmlns:pm="http://www.politicalmashup.nl" recordfile="">
<pm:root>
<pm:docinfo/>
<pm:meta>
<dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">1923-03-01</dc:date>
<dc:subject xmlns:dc="http://purl.org/dc/elements/1.1/">artikel</dc:subject>
<dc:identifier xmlns:dc="http://purl.org/dc/elements/1.1/"
>ddd:010563762:mpeg21:p001:a0005</dc:identifier>
<dc:source xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:source>
<pm:link pm:source="832675288" pm:description="De Telegraaf"/>
</dc:source>
</dc:source>
</pm:meta>
<pm:content pm:source="http://kranten.kb.nl/view/article/id/ddd:010563762:mpeg21:p001:a0005"
pm:id="ddd:010563762:mpeg21:p001:a0005">
<title pm:id="ddd:010563762:mpeg21:p001:a0005.t">De jongste maaregelen op den Rechter-
Rijn-oeven.</title>
<text>
<p pm:id="ddd:010563762:mpeg21:p001:a0005.1">â– volgende redenen rijn bezet: lo. ter vereenvcudi-f
ging ran het douane-wezen en 2o. wegens fit' demonstratie» en vergaderingen, welke in de»e gebieden
zijn gehouden en gericht waren tegen de bezettingstroepen en de bezettingsautoriteiten. De
rijkscommissaris voor de bezette genie den heeft geweigerd, deze kennisgevins door te zenden. â€」
(Wolft},</p>
</text>
</pm:content>
</pm:root>
</pm:KBroot>
由此,我想從dc:date
標籤的日期,從日dc:subject
標籤,標題從title
標籤和主題來自text
標籤的文字,用於標籤pm:KBroot
中的每篇文章。我至今如下:
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("telegraaf-1923.xml", "r"), "xml")
all_articles = []
for article in soup.find_all("root"):
new_article = {
"date": article.date.string,
"subject": article.subject.string,
"title": article.content.title.string,
"body": article.content.text
}
all_articles.append(new_article)
導致了上述文章如下:
{
"date": "1923-03-01",
"body": "De jongste maaregelen op den Rechter- Rijn-oeven.\u25a0 volgende redenen rijn bezet: lo. ter vereenvcudi-f ging ran het douane-wezen en 2o. wegens fit' demonstratie\u00bb en vergaderingen, welke in de\u00bbe gebieden zijn gehouden en gericht waren tegen de bezettingstroepen en de bezettingsautoriteiten. De rijkscommissaris voor de bezette genie den heeft geweigerd, deze kennisgevins door te zenden. \u2014 (Wolft},",
"title": "De jongste maaregelen op den Rechter- Rijn-oeven.",
"subject": "artikel"
}
正如你所看到的,問題是分離的標題和文章正文,因爲它們都有text
標籤,所以body
包含文章的標題和正文。我嘗試使用"body": article.content.text.p
,但這給了AttributeError: 'unicode' object has no attribute 'p'
。
'文本「在BS中有特殊的含義。它就像函數'get_text()'或'string'在你的代碼 - 所以也許嘗試'article.content.p.string'或者你必須使用'find('text')' – furas