新聞の記事が満載のXMLファイルを解析し、JSON形式で保存し、リストに保存してから、elasticsearch
で一括してインデックスを作成しようとしています。各記事から、出版された日付、記事のタイプ(広告、通常の記事など)、タイトルとコンテンツを取得したいと思います。私がこれを持っている問題は、記事のタイトルとその内容を分けることができないということです。BeautifulSoupを使用したXMLの解析
記事の1の例を次に示します。このことから
<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
タグからタイトルから日付を取得したいとpm:KBroot
の各記事のtext
タグのテキスト。私はこれまで、次のされています
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'
となります。
を使用する必要が
あなたのコード(または機能
get_text()
)でstring
のようなものですテキストはBSにおいて特別な意味を有する。あなたのコードでは 'get_text()'や 'string'のようなものです。' article.content.p.string'を試してみるか、 'find( 'text')'を使う必要があります。 – furas