Selenium에서 가로로 셀 결합된 테이블 로드

개요



Selenium에서 다음과 같이 셀 결합된 테이블을 좋은 느낌으로 읽고 싶다.
이번에는 가로로 조인된 테이블을 대상으로 하며 데이터 보완도 왼쪽 방향으로 보완하여 읽고 싶은 경우를 상정하고 있습니다.

입력


table.html
<table id="tbl">
<tr>
    <td> a </td>
    <td> b </td>
    <td> c </td>
</tr>
<tr>
    <td colspan=2> 1 </td>
    <td> 2 </td>
</tr>
<tr>
    <td> 4 </td>
    <td colspan=2> 5 </td>
</tr>
</table>

얻고 싶은 출력


구현


pandasread_html 를 사용합니다.
※ 참고로 한 기사 : h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 60823159 / ぱ r シン g ー s te dt d an d d Niu mpy
#seleniumでサンプルのhtmlファイルを読み込む
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome(executable_path = '<<<CHROMEDRIVER>>>')
driver.get(r'C:\Users\<<<USERNAME>>>\Desktop\table.html')

#seleniumのfind_elementでテーブル要素を探してHTMLテキスト化して
table_id = driver.find_element(By.ID, 'tbl')
tabletext = table_id.get_attribute('outerHTML')

#pandasのread_htmlでDataFrameに変換する
import pandas as pd
df = pd.read_html(tabletext)
df = df[0]
df

#   0   1   2
#0  a   b   c
#1  1   1   2
#2  4   5   5

실패 예



지금까지 셀의 데이터를 각 셀마다 스캔해 버리고 있어 잘 되지 않았습니다. (원래 이것도 너무 많지만…)
어쨌든 colspan의 정보를 가져 오지 않으면 안되는 것일까 라든지, 괴로웠습니다만, 앞에서 설명한 기사 봐 눈으로부터 비늘 엉망이었습니다.
table_id = driver.find_element(By.ID, 'tbl')
rows = table_id.find_elements(By.TAG_NAME, "tr")
r_data = []
for i, row in enumerate(rows):
    cols = row.find_elements(By.TAG_NAME, "td")
    c_data = []
    for j, col in enumerate(cols):
        c_data.append(col.text)
    r_data.append(c_data)
r_data

#[['a', 'b', 'c'], ['1', '2'], ['4', '5']]

요약



pandas는 굉장합니다.
※행 방향으로 셀 결합된 것이라든지는 검증하고 있지 않습니다.

좋은 웹페이지 즐겨찾기