概要
スクレイピングとはWebサイトからデータを取得すること。
Webスクレイピングとも呼ばれます。
サイトによっては禁止されている場合やマナーなどがあるので、使うときは注意が必要です。
今回はBeautifulSoupとurllib.requestいうモジュールを使って気象データを取得します。
最終的にこのようなCSVファイルを作成しました。
日時,現地気圧,海面気圧,降水量,平均気温,最高気温,最低気温,湿度,平均風速,最大風速,最大風向,日照時間
2020-01-01,1018.0,1021.0,--,5.5,10.2,3.2,49,2.6,6.1,337.5,7.4
...
Pythonで実装
今回は気象庁HPより、表になったデータを取得しました。
BeautifulSoupとurllib.requestがない場合はpipなどで入れてください。
pip公式では下記のように書かれていました。
pip install beautifulsoup4
pip install pycopy-urllib.request
それでは実装していきます。
import urllib.request
from bs4 import BeautifulSoup
url = "https://..."
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, "lxml")
tbl = soup.find("table", { "class" : "data2_s" })
for tr in tbl.findAll('tr'):
tdList = tr.findAll('td')
print(tdList[0].string)
urllib.requestでhtmlコードを取得し、BeautifulSoupで解析していきます。
第二引数には下記があります。必要なライブラリがない場合はエラーを吐きます。
- lxml
- html.parser
- xml
- html5lib
変数soupにはBeautifulSoupによって綺麗なコードが格納されています。
これを加工してデータを取得できます。
今回は表なので、htmlから表の部分を取り出し、trの中にあるtdを取得します。
findAllにはリスト型で入っているので、欲しい要素番号を指定しましょう。
stringをつけることで文字列になります。
これをCSVモジュール等でファイルに書き出せば、冒頭のようなCSVファイルを作成することができます。
詳しい説明はこちらでしています。
まとめ
PythonのBeautifulSoupを使って超簡単にスクレイピングを実現できました。
データ取得が自動化できるのはかなりありがたいですね。
その他
今回実装したソースコードはGitHubに置いてあります。
作成にあたり、下記サイトを参考にさせていただきました。
この場を借りて感謝申し上げます。