あるAPI (XML) をBeautifulSoup にて取得しMySqlにインポートしようとしているのですが、
タグの形式が変わるものがあり、処理が停止してしまうので、
知見のある方に打開策をいただければと思います。
対象のAPI (XML、ブラウザ表示時) (抜粋)
■rating中身あり
XML
1 2<item> 3 <name>桜木</name> 4 <rating>3</rating> 5</item> 6
XML
1■Rating中身なし 2 3<item> 4 <name>流川</name> 5 <rating/> 6</item>
BeautifulSoupにてテキスト出力してみると下記のようなタグに変わっていました。
XML
1 2<item> 3 <name>流川</name> 4 <rating></rating> 5</item> 6
エラーメッセージ
Python
1TypeError: must be str, not NoneType 2(SQL文でエラー)
コード
Python
1import urllib.request 2from bs4 import BeautifulSoup 3import pymysql.cursors 4import requests 5 6 7connection = pymysql.connect( 8 host='localhost', 9 port=3306, 10 user='user', 11 password='password', 12 db='test_db', 13 charset='utf8', 14 cursorclass=pymysql.cursors.DictCursor 15) 16 17cursor = connection.cursor() 18 19url = "http://api.url" 20 21html = urllib.request.urlopen(url) 22soup = BeautifulSoup(html,"html5lib") 23 24#print(soup.prettify()) テキスト出力確認用 25 26for item in soup.findAll("item"): 27 name = item.name.string 28 29 30#空の場合は0を入れてみるもうまくいかず・・ 31 if item.rating.string == "": 32 Rating = '0' 33 34 else: 35 Rating = item.rating.string 36 37 sql = "insert into `test_table` (`name`, `rating`) values ('" + name + "','" + rating + "')" 38 39 cursor.execute(sql) 40 result = cursor.fetchall() 41 connection.commit() 42 43connection.close() 44
(テーブル等簡素化しています)
40件中25件ほどまでは問題なくMySqlにインポートされるのですが、
<Rating/> のタグがでてくるとエラーになってしまいます。
ご教授のほど、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー