Pythonでスクレイピングできるツール作成してみた。
🐣 はじめに
既定のExcelシートにxpathを入力すると、スクレイピングできるデスクトップアプリを作成しました。作成した経緯としては情報収集のためにスクレイピングしたい機会もあり、スクレイピングする媒体のごとにpythonを書くのが手間だったので、簡単なスクレイピングできるツールを作ってしまおう!っと思い作成しました。
🎯 使用した環境・構築方法
今回はPythonの3.9.13バージョンで開発しました。
フレームワークとしてはpythonのtkinterを使用しています。
使用してみたい場合は以下手順でダウンロード実行お願いします。
実行方法
- ソースコードのgithub(下記記載)からScrapertoolをzipファイルでダウンロード
- ダウンロードしたzipファイルを解凍し、自分のドライブにフォルダごとコピーする。
- pythonが入っている環境で、先ほどのパスの中で以下を実行し、環境を構築する。
pip install -r config/requirements.txt
- main.pyを実行し、起動する。
python main.py
ソースコード
今回スクレイピングした媒体
留意点
スクレイピングは指定したWebサイトから必要な情報のみを収集することができるので、スクレイピングによる情報の収集自体には違法性はありません。ただし、注意しないとならない点として、収集した情報の取り扱い方によっては違法行為が発生する場合があります。また、Webサイトの運営者に迷惑をかける行為も禁じられています。サイトによってはスクレイピングによるデータの取得を禁止している場合もあり、これに逆らってのデータ取得も違法行為となり得ます。
スクレイピングする媒体や使い方について、以下の3項目に注意し、決めました。
- 使用目的
あくまでも個人的な情報収集であって、著作権者の同意を得ることなく、販売、利益を得るような行為はしない。
- スクレイピングの対象
画像や、音声・映像は著作権に違反する可能性があるため、今回は文字だけに限定
- 利用規約の確認
今回は株探のサイトがスクレイピング許可しているか以下のURLで確認を行い、最新の注意を払いました。
- User-agent ... 対象となるクローラーの種類
- Disallow ... クロールを禁止するパス
- Sitemap ... サイトマップXMLのURL
主な使い方
1.Sheet1・Sheet2シートを記述する
sourceフォルダに入っている、規定のExcelシートのSheet1またはSheet2にスクレイピングしたい媒体名とURLを記述する。
2.xpath管理シートを記述する
先ほどのエクセルのxpath管理シート[1]にスクレイピングしたい箇所のxpath[2]を記入する
3.ツールを実行する
main.pyを実行すると、ツールの画面が表示されるので、以下項目を入力し、実行ボタンを押す。
- シート名
Sheet1かSheet2を選択してください
- way
本番:制限なしで実行します。
テスト:最初の5ページで終了します。
- From・To
開始したいエクセルの行番号と終了したい行番号を記述してください。
例:2行目の場合、Fromに2、Toに2を記述する。
💡工夫したポイント
その1:設定ファイル
configフォルダを作成し、setting.iniの設定ファイルと環境構築ファイルのrequirements.textを使用しました。環境構築ファイルではインストールするモジュールのバージョンを記述することにより、どのようなモジュールを使用しているのかが一目でわかりやすくなったことや、ダウンロードしてからの構築が容易になりました。
定数などは直接記述するのでなく、設定ファイルに記述することで環境が変わったりしたときに変更が容易になり、連想配列と似たように使用できるのでソースコードも見やすくなりました。
その2:実行ボタンの制御
ツールの画面で表示されるActionボタンを実行中は押すことのできないように工夫しました。
このような細かい仕様は一人で使用する分には大丈夫だとしても、多数の人が使用するものには重要な要素だと考えています。2回重複実行されエラーが生じる可能性も考えられるので、起きる前にそもそも起こさせないことが必要だと感じました。
その3:メニューボタンの表示
ツールの画面でメニューボタンを表示させました。今回のようなツールでは必要ないのですが、より多機能なツールではメニューボタンやタブ表示機能は必要になってくると思います。このような機能を実装するとなると、htmlなどで作成されたWebページでは最初は非表示にしておいて、クリックされるとjavascriptで動きをつけて表示させるという手法になると思います。pythonによる、tkinterではフレームという枠組みを用意しておいて表示させるという仕様になります。フレームワークや言語が違うと、手段が全然違うという理解とともにその違いを知れたことがよかったです。
🤝 今後やっていきたいこと
スクレイピングに使用される代表的な言語がpythonであるので、GUIの作成はpythonのフレームワークであるtkinterで作成しました。tkinterでも工夫することでおしゃれなGUIアプリが作成できることを知れたのですが、exe化したときにファイル容量が肥大化してしましました。pyファイルをexe化するときに、仮想環境を使用すること・onefileで一つのファイルにまとめないことを意識し、容量の削減を図りましたが、pythonのフレームワークである以上どうしても肥大化してしまうようです。容量の大きいpythonの実行は、動作が遅くなったり、PC側にも負荷がかかるので軽量化にすることは重要だと考えています。今後、windowsともpythonとも相性のいい、C言語でフレームワークを作成し、実行するときにpythonファイルを呼び出すことが一番スムーズだと思ったので、このような機会があれば、C言語でフレームワークを作成したいです。
🍵 おわりに
今回のツールを試してみると、実際20分ほどで4000件の会社情報をスクレイピングすることが可能になりました。今後分析・解析を中心に取り組んでいきたいので、情報を収集する技術は必要不可欠になってきそうですね、、。みなさん使う場合はくれぐれもスクレイピングする際のルールは守ってください。
他にもいろいろと取り組んでいるので、隙を見て発信していきたいと思います。
それでは!👋
Discussion
規約に抵触する本記事の削除依頼
sou 様
突然のご連絡失礼いたします。
本記事(https://zenn.dev/sou3515/articles/8d5984f91d3895)に記載の、「株探」サイト(以下、「当社運営サイト」といたします。)
の運営を行っております、株式会社ミンカブ・ジ・インフォノイドの瓜生正己と申します。
当社運営サイトの利用規約では、以下の通り、スクレイピングについて禁止しております。
・株探
第4条(禁止事項)
第3号
「本サイトのコンテンツ等の複製、編集、加工等を行う行為、また、これらを行ったコンテンツ等を第三者へ提供、再配信を行う行為。」
つきましては、これらの規約に抵触する本記事の削除のご対応をいただきたく、お願い申し上げます。
本件に関するご連絡は、下記メールアドレス宛に頂戴できれば幸いです。
URLが不正です何卒、よろしくお願い申し上げます。