【python】Webスクレイピングとは何か?初心者の方向けに基本をシンプルに解説します
Webスクレイピングという言葉を聞いたことはありますか?
今回は、pythonで使える「Webスクレイピング」の基本について解説していきたいと思います。
・ 機械学習エンジニアやデータサイエンティストになりたくてpythonを勉強している
・ AIエンジニアを目指したくてpython勉強中
・ 業務効率化やサービス開発のためにpythonを学んでいる
など、pythonを学び始めたキッカケは人それぞれかと思いますが
“ Webスクレイピングはpython使いなら身に付けておいて損はないスキル ”
と言えます。
そこで今回は、Webスクレイピングの概要や出来ることを中心に紹介していきます。
【こんな方に読んで欲しい記事です】
● pythonの「Webスクレイピング」に興味がある方
● Webスクレイピングの概要や出来ることをざっくり把握しておきたい方
「Webスクレイピングで出来ること」では、実際にpythonコードを書いてGoogleの検索結果で表示された記事タイトルを取得してみることにします。
ポイントその①|Webスクレイピングって何?
最初に、そもそもWebスクレイピングって何?という点を確認しておきましょう。
知っている方もいるかもしれませんが、簡単に言ってしまえば「Webサイトなどにアクセスして、ページ内の情報を取得すること」をWebスクレイピングと言います。
ウェブサイトはHTMLで書かれているので、もう少し丁寧に表現すると「ページ内のHTML要素を取得する方法」ということも出来ます。
基本的にはこれだけ知っておけばさほど問題ありませんが、Webスクレイピングとセットで出てくる言葉に
「クローリング」というものがあるので、これも知っておきましょう。
クローリングというのは、色んなWebページやリンクを見て回ることを言います。水泳のクロールみたいに、情報の波(=Webページ)を見て回るイメージだねクローリングするプログラムを「クローラー」と言ったりします。
まとめると、
・ クローリングで情報を取得したいサイトにアクセス
・ スクレイピングでサイト内のHTML情報を取得
といったイメージになりますね。
今回は「Webスクレイピング」の話なので、どちらかと言えば後者がメインになります。
ポイントその②|Webスクレイピングする前に知っておきたいこと
続いて、Webスクレイピングをするにあたって知っておきたいことを3つほど紹介しておきます。
1つ目は、スクレイピングに関する目的設定です。
スクレイピングに限らず、データ分析する場面でも同じことが言えるのですが、「何のためにスクレイピングをしているのか?」「取得したデータをどうしたいのか?」という点を意識してみてください。
そうしないと、「Webスクレイピングの勉強自体が目的」といった手段の目的化が起こってしまうからです。
2つ目は、スクレイピングが法律やサイト規約に違反しないように気を付けなければならない点です。
基本的に、個人利用やデータ集計目的であれば問題ありませんが、
・ 著作権法に違反しないようにスクレイピングをする
・ Webサイト規約に違反したり、過度にサーバーへ負荷をかけないように気を付ける
といった点は知っておきましょう。
2010年頃ですが、Librahack事件として世間に議論を呼んだ事件もありました。正直そんなビビる必要はないので、ルールは守ろうくらいに思っておきましょう。
より詳しくスクレイピングの注意事項を知っておきたい方は、Qiita記事を参考にしてみてください。
3つ目は、スクレイピングをする方法についてです。
pythonでスクレイピングをしていくことになりますが、実はいくつか方法があります。
<Webスクレイピングをするための主な方法>
・ Beautiful Soup
・ selenium
・ requests
・ PyQuery
・ scrapy
すべて使えるようになる必要はまったくないので、自分の好みで学んでいけばいいと思います。個人的には、最初の2つ(Beautiful Soupとselenium)を知っておけば十分なんじゃないかなと思ってます。
今回は具体的な勉強方法やコードについては触れませんが、「スクレイピングするためには色んな方法があるんだな」程度に知っておいてください。
ポイントその③|Webスクレイピングで出来ること
最後に、Webスクレイピングで出来ることについて紹介していきます。
簡単なイメージを持ってもらいたいので、今回はGoogle検索で上位表示された記事のタイトル名を取得してみたいと思います。
検索キーワードは「python webスクレイピング」にしてみます。
記事投稿時点で上位表示されている記事は以下の通りです。
左側が1位~5位、右側が6位~10位です(SEOで変動している可能性はあります)
目的を設定したので、Jupyter Notebookを使って1位から10位の記事タイトル名を取得してみます。
以下コードでは、
① : 記事タイトルを一つずつ取得してprint関数で内容を表示
② : 取得した結果をデータフレームとして表示
の2つを表しています。
スクレイピングを使うことによって、こんな感じでデータを取得することが出来ます。他にも、まとめサイトにアクセスして画像を収集したり、ECサイトで商品情報を集めてくるなど活用の幅は広いです。
データフレーム化することで、csvやExcelなどの外部ファイルにも出力できるので、pandasも是非使えるようにしてみてください。
pandasでデータフレームを作成する方法は、以下記事で紹介しています。
さいごに
今回は、pythonで使えるWebスクレイピングの基本について解説してきました。
「結構難しそう」と思われる方もいるかもしれませんが、個人的にはデータサイエンスやサービス開発に比べると、比較的簡単にコードを書けると思っています。
なので、pythonの基本(文字列操作やforループなど)をある程度学んだあとは、実践的なスキルとして
Webスクレイピングを勉強してみるのも大アリだと思います。
具体的な勉強方法やコードについては別記事で紹介しようと思っているので、良ければそちらの記事も見て頂けるとうれしいです。