gpt4 book ai didi

python - 用BeautifulSoup解析XML

转载 作者:行者123 更新时间:2023-12-03 01:51:16 26 4
gpt4 key购买 nike

我正在尝试解析一个XML文件,该文件中满是报纸上的文章,将其保存为JSON格式,将其保存到列表中,然后使用elasticsearch对其进行批量索引。我想从每篇文章中获取其发表日期,文章类型(广告,常规文章等)及其标题和内容。我遇到的问题是,我无法将文章标题与内容分开。

这里显示了其中一篇文章的示例:

<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'

最佳答案

text在BS中具有特殊含义。就像您的代码中的string(或函数get_text())

所以article.content.text表示article.content.stringarticle.content.get_text()
但是你可以使用

article.content.p.string

或者您必须使用 find('text')
article.content.find('text').p.string

关于python - 用BeautifulSoup解析XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40218342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com