LoginSignup
38
25

More than 5 years have passed since last update.

Beautiful Soupで.stringを使うとNoneになってしまう時の解消法

Last updated at Posted at 2018-01-29

BeautifulSoupの.stringを利用してタグ内のデータを表示しようとするとNoneが返ってきてしまう時の解消法です。

filename.py
from bs4 import BeautifulSoup

table = '\
  <table>\
    <tr>\
      <td>2018/01/29<br/>18:55</td>\
      <td>晴れ</td>\
    </tr>\
    <tr>\
      <td>2018/01/28<br/>18:45</td>\
      <td>曇り</td>\
    </tr>\
  </table>'

bsObj = BeautifulSoup(table, 'lxml')

tr = bsObj.find_all('tr')

for r in tr:
  td = r.find_all('td')
  for d in td:
    print(d)

# <td>2018/01/29<br/>18:55</td>
# <td>晴れ</td>
# <td>2018/01/28<br/>18:45</td>
# <td>曇り</td>

こんなデータを取得した場合、タグを除去してデータを保管したいところですよね。
.stringを利用してタグの中のテキストだけ取得しようとするとこんな結果が返ってきます。

filename.py

for r in tr:
  td = r.find_all('td')
  for d in td:
    print(d.string)

# None
# 晴れ
# None
# 曇り

2つ以上のタグがある場合は.stringするとNoneが返ってきてしまうようです。
この場合は、.textを利用するとうまくいくようです。

filename.py


for r in tr:
  td = r.find_all('td')
  for d in td:
    print(d.text)

# 2018/01/2918:55
# 晴れ
# 2018/01/2818:45
# 曇り


タグが消されてしまっただけなので今回の例では
年月日と時間を切り分けなければなりませんが、、、
.stringでNoneになってしまう件は解消しました。

38
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
25