Beautiful Soupを使ったWebスクレイビングのサンプルコード(気象情報をcsvにエクスポート)です。
#####ライブラリのインポート
import os #os操作
import datetime #日付・時間を操作
import csv #csv操作
import urllib.request #URLを開くためのライブラリ
from bs4 import BeautifulSoup
#####関数を作成(文字列を数値に変換)
def str2float(weather_data): #文字列を数字(float)に変換
try:
return float(weather_data)
except:
return 0
#####関数を作成(ページ内からテーブルを取得)
def scraping(url, date):
# 気象庁のウェブサイトを取得
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html)
trs = soup.find("table", { "class" : "data2_s" })
data_list = [] #データを配列で保持
# table の中身を取得
for tr in trs.findAll('tr')[4:]:
tds = tr.findAll('td')
if tds[1].string == None:
break;
data_list.append(str2float(tds[0].string)
data_list.append(str2float(tds[1].string))
data_list.append(str2float(tds[2].string))
# ~中略~
data_list.append(str2float(tds[12].string))
data_list.append(str2float(tds[13].string))
return data_list
#####関数を作成(対象url取得・csv出力)
def create_csv():
# CSV 出力先ディレクトリ
output_dir = "C:\Users\username\Documents\Python"
# 出力ファイル名
output_file = "weather.csv"
# データ取得開始・終了日
start_date = datetime.date(2020, 12, 1)
end_date = datetime.date(2021, 12, 1)
# 見出し列
fields = ["年月日", "気圧(現地)", "気圧(海面)", "天気概要(夜)"]
# ディレクトリにcsvファイルを書き込み
with open(os.path.join(output_dir, output_file), 'w') as f:
writer = csv.writer(f, lineterminator='\n') #csvに書込み
writer.writerow(fields) #1行ずつ書込み
# 開始日から終了日まで処理継続
date = start_date
while date != end_date + datetime.timedelta(days=1):
# urlに年月日を代入
url="http://www.data.jma.go.jp/obd/stats/etrn/view/daily_s1.php?"\"prec_no=44&block_no=47662&year=%d&month=%d&day=%d&view="%(date.year, date.month, date.day)
data_per_day = scraping(url, date) #テーブル探索関数を外出し
writer.writerow(date_per_day)
date += datetime.timedelta(days=1)
##参照元
Beautiful Soupの公式コミュニティ(英語)
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
10分で理解する Beautiful Soup
https://qiita.com/Chanmoro/items/db51658b073acddea4ac
##参考
YouTubeで「Pythonを使った事務処理の効率化」というタイトルでBeautifulSoupを使ったWebスクレイピングについて紹介。