スクレイピングで要素を取得してエクセルに保存
この記事ではスクレイピングしたデータをエクセルに保存する方法を解説します。
仕様するライブラリは、Requests、Beautiful Soup、OpenPyXLの3つを使用します。
スクレイピングの為に使用するRequestsとBeautiful Soupに関しては関連記事で使い方を説明しております。
→関連記事:スクレイピングの基礎知識を解説【入門編】
エクセルを操作するライブラリOpenPyXLの使い方はコチラで解説しております。
→関連記事:EXCELを操作するライブラリOpenPyXLを解説
今回はコチラの二つの要素を組み合わせて、スクレイピングした内容をエクセルにバンバン保存していきたいと思います。
スクレイピングを行う内容を決める
まずは指定のサイトから保存したい要素を決めておきます。
今回はyahooファイナンスより、日経平均株価、NYダウ、米ドル/日本円の3つの要素を保存する事にしましょう。
Requestsでスクレイピング
全体のコードを分割して解説していきます。
まずはRequestsを使用して、yahooファイナンスをスクレイピングします。
import requests r = requests.get('https://finance.yahoo.co.jp/')
Beautiful Soupで必要な情報を抽出しよう
先ほどRequestsで取得した情報からBeautiful Soupで必要な情報だけ抽出します。
import requests from bs4 import BeautifulSoup r = requests.get('https://finance.yahoo.co.jp/') bs = BeautifulSoup(r.text, 'html.parser') for i in bs.select("#one-header > dl"): print(i.getText()) for i in bs.select("#two-header > dl"): print(i.getText()) for i in bs.select("#three-header > dl"): print(i.getText())
日経平均株価
+34.64
22,079.09
NYダウ
-159.72
26,935.07
アメリカ ドル / 日本 円
107.410000
必要な情報はとりあえず抽出できていますね、今回はCSSセレクターから大まかにdlタグの中身をテキストで抽出していますが、エクセルで指定した場所に保存する場合もう少し細かく指定してあげたほうがエラーが少なく抽出できます。
OpenPyXLでエクセルに保存しよう
次は日経平均株価をエクセルの「A1」「B1」「C1」をエクセルに保存するコードです。
エクセルは新規作成を行いファイル名「sample」で保存を行いたいと思います。
保存先はデスクトップにしておきますが、ディレクトリの指定方法は各々のPC環境によって書き方が異なります。
筆者はwindows環境で実行しておりますので、予めご了承ください。
セルの指定はR1C1形式で書いていますが、これくらいのコードならA1形式のほうが書きやすいかとも思います。
初めに断っておきますと、for文を使用してコードを書いているのはもし、複数の要素を取得してしまった場合のエラーを回避する為です。
import requests from bs4 import BeautifulSoup import openpyxl r = requests.get('https://finance.yahoo.co.jp/') bs = BeautifulSoup(r.text, 'html.parser') wb = openpyxl.Workbook() wa = wb.active for i in bs.select("#one-header > dl > dt"): wa.cell(row=1, column=1).value = i.getText() for i in bs.select("#one-header > dl > dd:nth-child(3) > strong"): wa.cell(row=1, column=2).value = i.getText() for i in bs.select("#one-header > dl > dd.ymuiEditLink.mar0.fixWidth > strong"): wa.cell(row=1, column=3).value = i.getText() wb.save(r'C:\Users\user\Desktop\sample.xlsx')
これで日経平均株価をエクセルに保存できました。
今回は一番手抜きな書き方でコードは正直めちゃめちゃ汚いです(笑)
columnをカウンタ変数にして、for文の最後にカウントを追加する等を行いよりきれいにコードを書くことができますが、次の記事でエクセルを使って簡単に半自動でブログ記事を作成する方法の記事を書きますので、今回は直接セルを指定して入力を行いました。
この記事は以上です。繰り返しますが、あまり綺麗なコードではありませんが、初学者さんが参考になれば幸いです。