非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

PythonでWebページの表全体のデータを取得しcsvファイルの保存する

   

以前、PythonでBeautifulSoupライブラリを使った為替情報をスクレイピングする方法について紹介しました。このときは1個のデータを取得する方法でしたが、Webページ上の表データすべてを取得し配列に収めることもできます。

今回は、以下のYahooファイナンスページの表データ(日足の為替データ)を一度に取得し配列に収めて、それをcsvファイルに保存するところまでを紹介したいと思います。

https://finance.yahoo.co.jp/quote/USDJPY=X/history?page=1

 

まず最初にテーブルのclass名を調べます。表中のどこでもいいので右クリックメニューの「検証」を選択すると以下のように該当するHTMLソースが現れます。その中からTableのclass名を探しメモしておきましょう。

 

以下のソースコードが表データを取得する例です。Yahooファイナンスのデータは何ページにも渡っているので、とりあえず5ページ分まで取得するようにしました。

import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup

csv_data=[]

for i in range(1,6): #指定ページまでループ
    url = 'https://finance.yahoo.co.jp/quote/USDJPY=X/history?page='+str(i)
    html = urlopen(url)
    soup = BeautifulSoup(html, "html.parser")
    table = soup.findAll("table", {"class":"_2wv6alJH"})[0]

    trs = table.findAll("tr")

    for tr in trs:
        lines = []
        for cell in tr.findAll(['td']):
            lines.append(cell.get_text())
        if lines:
            csv_data.append(lines)

#タイトル行を末尾に入れてリバースする。(Yファイナンスは日付降順のため)
csv_data.append(['日付', '始値', '高値', '安値', '終値'])
csv_data.reverse()

with open('data.csv', 'w') as file:
  writer = csv.writer(file, lineterminator='\n')
  writer.writerows(csv_data)
 

 

結果はご覧のとおりです。(csvファイルをVSCodeから見た例)うまくcsvファイルに保存することができました。

 

スポンサーリンク

 - Python