[Python] 316 lxmlがない場合のpandas.read_html代替スクリプト

今のところM1 Macにおいてpipコマンドだけでライブラリを揃える場合、lxmlをインストールできないためpandas.read_htmlを使うケースでは代替スクリプトを考える必要があります。

私のスクリプトは以下のように書き換えました。tableを一旦CSVファイルにしてからデータフレームとして読み込んでいます。まどろっこしいですが仕方ないです。

# 代替スクリプト

# 文字コードをUTF-8に変換してソース取り込み
html = driver.page_source.encode('utf-8')

# BeautifulSoupでデータ抽出
soup = BeautifulSoup(html, "html.parser")

# soupから3番目のtableを抽出
table = soup.find_all("table",attrs={"cellspacing" : "1"})[2]
rows = table.findAll("tr")

filename = "table.csv"
with open(filename, "w", encoding='utf-8') as file:
    writer = csv.writer(file)
    for row in rows:
        csvRow = []
        for cell in row.findAll(['td', 'th']):
            text = cell.get_text()
            text2 = text.replace('"','').replace("\n","").replace(" ","").replace(" ","")
            csvRow.append(text2)
        writer.writerow(csvRow)

# CSVファイルをデータフレームに変換
df = pd.read_csv(filename)
# 旧スクリプト

# 文字コードをUTF-8に変換してソース取り込み
html = driver.page_source.encode('utf-8')

# BeautifulSoupでデータ抽出
soup = BeautifulSoup(html, "html.parser")

# soupから3番目のtableを抽出
table_data = soup.find_all("table",attrs={"cellspacing" : "1"})
df_stock_specific = pd.read_html(str(table_data), header=0)[2]
labels_specific = ['A','B','C','D','E']
df_stock_specific2 = df_stock_specific.reindex(labels_specific, axis=1)