🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

Q&A

1回答

910閲覧

PythonのWebスクレイピングについて

kirinlemon

総合スコア0

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

0グッド

0クリップ

投稿2021/01/23 18:53

前提・実現したいこと

Python3でSRUファイルをWebスクレイピングで解析し、それをXMLファイルとして出力するという研究を行なっています。
ここに質問の内容を詳しく書いてください。
文字列のみの文章はうまく出力されるのですが、数値が含まれている文章が出力されないため原因を知りたいです。また、現在のままだとターミナル上に出力するだけのプログラムのためXMLファイルとして出力する方法がわかりません。

発生している問題・エラーメッセージ

Traceback (most recent call last):
File "**/testt.py", line 28, in <module>
lat = rsoup.find('dcterms:spatial').find('geo:lat').text
AttributeError: 'NoneType' object has no attribute 'text'

該当のソースコード

Python3 ソースコードimport requests from bs4 import BeautifulSoup base = r'https://kn.ndl.go.jp/api/sru' #operation=searchRetrieve&version=1.2&startRecord=1&maximumRecords=200&recordPacking=xml&recordSchema=ndlkn&query=mediatype=3%20and%20identifier%20=R200200030*' payload = { 'operation': 'searchRetrieve' ,'maximumRecords': '200' ,'searchRetrieve&version': '1.2' ,'startRecord': '1' ,'recordPacking': 'string' ,'recordSchema': 'ndlkn' ,'query': 'mediatype=3 and identifier=R200200049*' } r = requests.get(base, params=payload) soup = BeautifulSoup(r.text, 'lxml') titles = {} i=0 for s in soup.records.find_all('recorddata'): rsoup = BeautifulSoup(s.text, "lxml") title = rsoup.find('dc:title').find('rdf:description').find('rdf:value').text lat = rsoup.find('dcterms:spatial').find('geo:lat').text lon = rsoup.find('dcterms:spatial').find('geo:long').text jpg = rsoup.find('foaf:thumbnail').text print(title) print(lat) print(lon) print(jpg) i= i+1 print(i)

試したこと

.textに問題があるのかと思い.stringで試してみましたがうまくいきません。

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

エラーの内容はfindで取得できずにNoneが返ってきていることで発生している内容に見えます。

対象のURLを叩いてみましたが、

国立国会図書館東日本大震災アーカイブ API

dcterms:spatialgeo:lat が含まれていないrecordもあるみたいですよ。

xml

1---------------------- 無いパターン 2<dcterms:spatial> 3 <rdf:Description> 4 <v:region>Miyagi prefecture</v:region> 5 <v:locality>Sendai city</v:locality> 6 <v:label>Miyagi prefecture, Sendai city</v:label> 7 </rdf:Description> 8</dcterms:spatial> 9 10---------------------- あるパターン 11<dcterms:spatial> 12 <rdf:Description> 13 <v:region>宮城県</v:region> 14 <v:locality>仙台市若林区</v:locality> 15 <v:street-address>荒浜</v:street-address> 16 <v:label>宮城県仙台市若林区荒浜</v:label> 17 <geo:lat>38.218369</geo:lat> 18 <geo:long>140.984723</geo:long> 19 </rdf:Description> 20</dcterms:spatial> 21

xmlを組み立てたい時は ElementTree を使えば良いと思います。

投稿2021/01/23 22:35

umau

総合スコア831

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問