LoginSignup
0
1

More than 1 year has passed since last update.

Beautiful Soupを使ったWebスクレイビングのサンプルコード(気象情報をcsvにエクスポート)

Last updated at Posted at 2022-02-13

Beautiful Soupを使ったWebスクレイビングのサンプルコード(気象情報をcsvにエクスポート)です。

scraping.JPG

ライブラリのインポート
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スクレイピングについて紹介。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1