前提・実現したいこと
pythonのライブラリであるseleniumを使って、Webサイトに表示されているtableをデータフレームに格納しようとしています。
発生している問題・エラーメッセージ
tdタグの内容を順番に取得していく際に、<td></td>のように空白がある場合、内容が取得できずにカラムがずれてしまいます。
該当のソースコード
取得元のHTMLはこちらです。
html
1<table id="table1"> 2 <tr> 3 <th>Name</th> 4 <th>Place</th> 5 <th>Age</th> 6 </tr> 7 <tr> 8 <td>Yamada</td> 9 <td>Tokyo</td> 10 <td>50</td> 11 </tr> 12 <tr> 13 <td>Kato</td> 14 <td></td> 15 <td>30</td> 16 </tr> 17 <tr> 18 <td>Tanaka</td> 19 <td>Kyoto</td> 20 <td>32</td> 21 </tr> 22</table>
データを取得するpythonはこちらです。
python
1from selenium import webdriver 2from selenium.webdriver.common.by import By 3import re 4import chromedriver_binary 5from time import sleep 6import pandas as pd 7 8browser = webdriver.Chrome() 9browser.get('取得したいURL') 10sleep(2) 11 12tableElem = browser.find_element_by_id('table1') 13trs = tableElem.find_elements(By.TAG_NAME, "tr") 14data = [] 15for i in range(0, len(trs)): 16 record = trs[i].text.split(' ') 17 data.append(record) 18 19df = pd.DataFrame(data) 20
上記PGMの結果
上記の行Katoのおいて、Placeが空白であるたために列1にAgeの値である30が入り、列2はNoneになってしまいます。
これを、行Kato・列1は空白、行Kato・列2に30 と入れたいのですがうまくいきません。
get_attribute("textContent")
を試してみましたが結果は同じでした。
補足情報(FW/ツールのバージョンなど)
Chrome : 89.0.4389.114
chromedriver_binary : 89.0.4389.23
Python : 3.8x
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/01 05:26