pythonとExcelでWebスクレイピング Part4
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/web-scraping-with-python-and-excel-part-4-1-768x512.png)
はじめに
前回までの記事で、スクレイピングしたい要素を取得することができた。
今回は、「4 取得した内容をExcelのA2〜A4に出力する」を行う。
1 必要なライブラリをインポートする
2 WEBサイトにアクセスする
3 スクレイピングしたい要素を取得する
4 取得した内容をExcelのA2〜A4に出力する ← イマココ
取得した内容
当サイトのトップページの記事タイトルを取得することができている。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-17.27.38.png)
ExcelのA2〜A4セル
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-24-8.19.23.png)
戦略
openpyxlを使用する。
取得した記事タイトルのデータをExcelシートに展開する。
openpyxlを使う
ブックを読み込み、アクティブなシートを取得する。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-17.54.28.png)
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.04.22.png)
定数を指定する
A2セルからデータを出力していくので、以下の定数を指定する。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.07.43.png)
load_workbookを使おうとするとエラー発生
load_workbookだと以下のエラーが発生した。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.11.22-1024x86.png)
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しかインポートしていなかったため。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.12.24.png)
openpyxlを明示することで、エラーが解消した。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.13.17.png)
for文で、取得したタイトルが入ったttl_listの長さ分だけ繰り返し処理
for文で、ttl_listの長さの分だけ繰り返し処理を行うことができた。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.14.09.png)
出力結果。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.16.35.png)
cellメソッドを使用
2行目の1列目に「hoge」という文字列を入れようとしたが、何も起こらなかった。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.19.38.png)
まずはこちらを参考に値の書き込みができるようになろう。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.20.40.png)
参考サイトの例で行おうとしたが、保存の処理を書いていないことが原因かもしれないことに気付いた。
saveメソッドで保存する。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.24.22.png)
開いていたエクセルを一度閉じてまた開くと、無事に「hoge」を入力することができていた。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.25.15.png)
定数を使用して、入力する列を可変にする
先ほど設定した定数をfor文の中で使用した。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.26.48.png)
+ iとすることで、cellメソッドに渡す列の引数が、「2 + 0、2 + 1、2 + 2」と可変になる。
以下を実行してみよう。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.28.42.png)
エクセルはプレーンな状態に戻しておき、保存をかけておいた。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.29.12.png)
期待通りの結果となった。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.30.33.png)
止めを刺す
先ほど、「0、1、2」となっていたのを記事タイトルにすれば、ミッションコンプリート。
あと一歩と思いきや、ラスボスは手強い。
そこで、ターミナルに出力させて確かめながら、一歩ずつ進んでいくことにした。
まずは、記事タイトルが入った配列をそのまま出力させてみる。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.35.36.png)
記事タイトルではなく、HTMLが入っていた。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.38.17-1024x182.png)
次に中身を順番に取り出してみる。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.38.50.png)
HTMLを順番に取り出すことができた。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.39.18-1024x73.png)
textメソッドを使用すると、どうなるか?
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.40.18.png)
期待通りの結果となった。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.40.38.png)
printの中身を先ほどの右辺に持ってこれば、ゲームセットだ。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.41.26.png)
オバーフローしてしまったが、無事目的が達成できた。
![](https://ki-hi-ro.com/ki-hi-ro.com-2022/wp-content/uploads/2024/05/スクリーンショット-2024-05-28-18.42.31-1024x202.png)
次回以降の課題
以下の2つの課題が残っている。
- エクセルを開いたままで、変化点が反映されるようにしたい
- openpyelでテキストを折り返す処理が出来ないか?
コメントを残す