こんばんは。
突然ですが、今回はプログラミング言語の一つであるPythonを使ってウェブスクレイピングをしたいと思い、試行錯誤した内容をメモ形式で残しました。
※ちなみに基本的な文法は分かりますが、それでも初心者に毛が生えた程度の理解度です
Webスクレイピングとは、WebサイトからWebページのHTMLデータを収集して、特定のデータを抽出、整形し直すことである。
Webスクレイピングを行うことで、Webページを対象として、あたかもWeb APIを利用しているかのようにデータを効率的に取得・収集することが可能になる。用途の例としては、部分的にコンテンツを取り出して携帯電話向けのコンテンツを生成したり、小見出しの一覧を生成したり、といった使い方あある。Webスクレイピングは様々な手段で実現可能であるが、PHPやPerlといったスクリプト言語を使用して行われることが多い。
なお、「スクレイピング」(scraping)とは元々「削る」や「こすり落とす」といった意味の英語である。
引用:weblio辞書https://www.weblio.jp/content/Web%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0
動機は、「日本の天気今と昔」シリーズで名古屋の過去の気温データをいちいちコピペしてたときに、
「そういえばPythonでサイト内の特定の情報を抽出することが出来たはず・・・」
と思ったところからです。
結局は同シリーズ第2話でその必要も無くなったことが判明したわけですが。
それでも別件で必要になったのでやってみることに。
※動作環境
macOS High Sierra 10.13.6
プロセッサ 2.7 GHz Intel Core i5
メモリ 8 GB 1867 MHz DDR3
Python 3.6.0 :: Anaconda custom (x86_64)
※参考文献「Python エンジニア ファーストブック」(142ページ以降中心)
以下試行錯誤メモ。
コマンド実行は「ターミナル」、.py編集は「Xcode」を使用。
PythonでスクレイピングするにはScrapyというフレームワークが良いらしい。
pip install scrapy
インストールしてバージョンを確認すると、以下の警告が出る。
UserWarning:
You do not have a working installation of the service_identity module:
'cannot import name 'opentype''.
Please install it from <https://pypi.python.org/pypi/service_identity> and make sure all of its dependencies are satisfied.
Without the service_identity module, Twisted can perform only rudimentary TLS client hostname verification.
Many valid certificate/hostname mappings may be rejected.
恐らくservice_identityをインストールせよという話。
pip install service_identity
だがしかし、インストールしても警告が出る。
cannot import name ‘opentype’が大事っぽい。
ただグーグルで検索しても英語のページばかりなので、一旦無視します笑
さて、scrapyをインストールしたところで、次はプロジェクトの作成(作業用のディレクトリや雛形などの作成)。
参考文献に沿って進める。
scrapy startproject <プロジェクト名>
はい、そして次。
tree <プロジェクト名>
とここで参考文献注。
「treeコマンドはmacOSに実装されていない」
はい、インストールします。
何も考えず、とりあえず。
pip install tree
駄目だったのでグーグル検索。
https://qiita.com/aryoa/items/9b3befa797147528aaafを参考にtreeコマンドをインストール。
再度tree <プロジェクト名>を実行して成功。
すると4つのディレクトリと7つのファイルが出来上がる。
よく分からないが、とりあえずsettings.pyをイジる必要があるらしい。
このsettings.pyはスクレイピングの設定を決めるファイルのようだ。
例えば、あまりに高頻度にウェブサイトをスクレイピング・クローリングすると、そのサイトに負荷がかかり、場合によってはそのサイトを攻撃しているとみなされる場合があるらしい。
そのような事態を避ける為にも、正しく設定してスクレイピング等を実行する必要がある、ということだ。
とりあえず一通り環境構築は出来たのでここまで。
次回は実際にスクレイピングするためにプログラムを書いていく。
→Pythonでスクレイピング(メモ2:コード作成)