pythonとExcelでWebスクレイピング Part4
はじめに
前回までの記事で、スクレイピングしたい要素を取得することができた。
今回は、「4 取得した内容をExcelのA2〜A4に出力する」を行う。
1 必要なライブラリをインポートする
2 WEBサイトにアクセスする
3 スクレイピングしたい要素を取得する
4 取得した内容をExcelのA2〜A4に出力する ← イマココ
取得した内容
当サイトのトップページの記事タイトルを取得することができている。
ExcelのA2〜A4セル
戦略
openpyxlを使用する。
取得した記事タイトルのデータをExcelシートに展開する。
openpyxlを使う
ブックを読み込み、アクティブなシートを取得する。
定数を指定する
A2セルからデータを出力していくので、以下の定数を指定する。
load_workbookを使おうとするとエラー発生
load_workbookだと以下のエラーが発生した。
Traceback (most recent call last):
File "/Users/hiroki/Downloads/Excel/Python_Excel/my_sample/my_sample.py", line 16, in <module>
wb = load_workbook('sample.xlsx')
NameError: name 'load_workbook' is not defined
原因は、openpyxlしかインポートしていなかったため。
openpyxlを明示することで、エラーが解消した。
for文で、取得したタイトルが入ったttl_listの長さ分だけ繰り返し処理
for文で、ttl_listの長さの分だけ繰り返し処理を行うことができた。
出力結果。
cellメソッドを使用
2行目の1列目に「hoge」という文字列を入れようとしたが、何も起こらなかった。
まずはこちらを参考に値の書き込みができるようになろう。
参考サイトの例で行おうとしたが、保存の処理を書いていないことが原因かもしれないことに気付いた。
saveメソッドで保存する。
開いていたエクセルを一度閉じてまた開くと、無事に「hoge」を入力することができていた。
定数を使用して、入力する列を可変にする
先ほど設定した定数をfor文の中で使用した。
+ iとすることで、cellメソッドに渡す列の引数が、「2 + 0、2 + 1、2 + 2」と可変になる。
以下を実行してみよう。
エクセルはプレーンな状態に戻しておき、保存をかけておいた。
期待通りの結果となった。
止めを刺す
先ほど、「0、1、2」となっていたのを記事タイトルにすれば、ミッションコンプリート。
あと一歩と思いきや、ラスボスは手強い。
そこで、ターミナルに出力させて確かめながら、一歩ずつ進んでいくことにした。
まずは、記事タイトルが入った配列をそのまま出力させてみる。
記事タイトルではなく、HTMLが入っていた。
次に中身を順番に取り出してみる。
HTMLを順番に取り出すことができた。
textメソッドを使用すると、どうなるか?
期待通りの結果となった。
printの中身を先ほどの右辺に持ってこれば、ゲームセットだ。
オバーフローしてしまったが、無事目的が達成できた。
次回以降の課題
以下の2つの課題が残っている。
- エクセルを開いたままで、変化点が反映されるようにしたい
- openpyelでテキストを折り返す処理が出来ないか?
コメントを残す