Pythonを学習し始めた矢先、スクレイピングなる存在を知ったそこのあなた。奇遇ですね。筆者もその経路でスクレイピングを学びました(笑)
魅力的に見えるスクレイピングですが、実は違法と見なされる場合がある事をご存知でしたか。知らない間に法を犯していた!とならない為にも、Python歴7年の筆者が事前に知っておきたいスクレイピングに関する情報をまとめました。
最後まで見ていただければ、安全に、楽しく、強力にスクレイピングを実践するための情報を収集できます。では早速見ていきましょう。
目次
スクレイピングとは
スクレイピングとは、ウェブサイトから任意の情報を取得する技術を指します。また、それを行うプログラムを指して『スクレイパ』と呼ぶこともあります。
スクレイピングをすることで、ウェブサイト上に存在している、ありとあらゆる情報をローカル環境下に保存することが可能です。好きなウェブサイトがあっても、知らないうちに閉鎖されていてコンテンツの閲覧ができない!となる前に、スクレイピングを実施していればコンテンツが閲覧できなくなる可能性を回避できます。
スクレイピングと混同されがちな技術としてクローリングというものをご存知でしょうか。続いてご覧ください。
クローリングとの違い
クローリングとは、ウェブサイトのリンクをなぞって、ウェブページを巡回する技術を指します。また、それを行うプログラムを指して『クローラー』と呼ぶこともあります。
ご自身でブログを運営されている方ならご存知かもしれません。“記事を更新した際にGoogleのクローラーに巡回させないと、データベースにインデックスされない”という言葉の羅列を聞いたことのある人も多いでしょう。かの有名企業にも積極的に採用されている技術です。
ウェブサイト内を巡回して(クローリング)から、任意の情報を取得する(スクレイピング)という関係性について、それぞれ異なる技術であるという点も含めて認識しましょう。
スクレイピングは違法行為の可能性がある
ここまでスクレイピングとクローリングについてご紹介しました。しかし冒頭申し上げた通り、クローリングとスクレイピングには違法となる可能性があります。なぜ違法となる場合があるのでしょうか。それは著作権とサーバー負荷の観点から説明可能です。
まず、著作件について。詳細は他サイトの記事※1に譲るとして、概要だけ説明します。
※1スクレイピングは違法?3つの法律問題と対応策を弁護士が5分で解説
コンピュータによって情報を解析すること、もしくは翻訳(ここでは、取得した情報に新たに表現を加えること)以外の場合は著作権法に引っかかる可能性があります。言い換えると、取得した情報を営利目的で他人に譲渡する場合などは違法となります。その為、情報を販売する場合はスクレイピングしたものを、自分で分析した後に再構成する必要があります。取得結果をそのまま、はNGです。
サーバー負荷に関しては過去の判例(岡崎市立図書館事件もしくはLibrahack事件※2)を元に考えてみましょう。問題となったのはサーバーへのアクセス頻度でした。頻度の是非についてここで言及するつもりはありませんが、頻繁すぎるサーバーへのアクセスは、ときにDoS攻撃と見なされる可能性があります。DoS攻撃について詳細を知りたい方はこちら(他サイトの記事)を※3参照ください。
※2岡崎市立中央図書館事件 – ウィキペディア(Wikipedia)
※3Dos攻撃とDDos攻撃の違いとは?
つまり、クローリング/スクレイピングの頻度が高すぎると、サーバーへのDoS攻撃と見なされる可能性がある、ということです。アクセス先のサーバー許容負荷を知らないうちにクローラー/スクレイパをコピペして、URLのみ変更して実行すると・・・恐ろしいですね。事前にサーバーに関して情報を知る必要がありますよね。そこでウェブサイトにはrobots.txtが用意されている場合が多いです。
まずはrobots.txtの確認から
robots.txtというファイルには、クローラー/スクレイパに対して、どのURLにアクセスして良いか、してはいけないか、その頻度について等の情報が記載されています。例えば以下のrobots.txtについて見てみると、
例: robots.txtに記載されている中身について
User-agent: *
Crawl-delay: 5
Disallow: /ng
Allow: /ok
sitemap: http://example.com/sitemap.xml
User-agent 対象となるクローラーの種類
Disallow クロールを禁止するパス
Allow クロールを許可するパス
Crawl-delay クロールする間隔(秒)
Sitemap サイトマップXMLのURL
などが挙げられます。ここで、Crawl-delayにはクロールの間隔が指定されている場合があり、クロールする場合はこの頻度を守る必要があります。
robots.txtは必ずウェブサイトのトップページに位置しています。使ったことがない人はいないサイトといえばWikipediaがありますね。Wikipediaにもrobots.txtは用意されています。アドレスバーにhttps://www.wikipedia.org/robots.txtを入力すれば閲覧可能です。
APIの提供有無を確認する
クローリング/スクレイピングをする前に、まずはAPIの提供有無を確認してみましょう。APIとはアプリケーション(自分の実行したいコト)と、プログラムを繋ぐ窓口のようなもので、Twitterなどでも公開されています。
例えばTwitterにて特定アカウントのツイートを取得したい場合、API経由で実装が可能です。これを自作のクローラー/スクレイパで実現することも可能ですが、API経由の場合、Twitter側がアクセス制限をかけているので、ユーザーが負荷を気にしすぎる必要はありません。
このように、APIが提供されている場合はAPIを使うことで、より安全にウェブサイトから任意の情報を取得可能となります。APIが存在していない場合に始めて自作のクローラー/スクレイパを実装しましょう。
Pythonでのスクレイピング実践方法
ここまでスクレイピングを始める前に必要な内容をまとめてきました。では、Pythonでスクレイピングを実践するためにはどうすれば良いのでしょうか。
ウェブに関する知識を全て身につけてからPythonでスクレイピングを実践することも、もちろん可能です。しかしせっかくPythonを学習しているのに遠回りしていては時間がもったいないですよね。そこで今回は有用なライブラリ、RequestsとBeautifulSoupについて簡単にご紹介します。
requests
指定したウェブサイトやウェブページのHTML/XML情報を取得します。Pythonには標準ライブラリであるurllib2がありますが、高機能故に少し使い勝手が悪いです。
Requestsの日本語公式を見てみると“人間のためのHTTP”と大げさに記述されています。記述はともかくとして非常に使い勝手が良く、URL文字列を指定することでHTMLの取得が可能です。ただし取得したHTMLには自分にとって必要ない情報が多く含まれています。
そこで活躍するのがBeautiful Soupです。
Beautiful Soup
Requestsで取得したHTMLやXMLから任意のデータを抽出するためのライブラリです。取得したてのHTMLは不必要な情報が大量に含まれています。その中から任意のタグ情報のみを抽出することが可能です。例えばとあるウェブサイトにアクセスし、お気に入りの画像を複数枚見つけ、その画像すべてが欲しいとします。Requestsを使ってHTMLを取得した後に、Beautiful Soupで成形し、IMGタグのsrcのみを抽出する・・・といったことも可能です。
このように2つのライブラリを組み合わせることによって、強力なスクレイパを自作することが可能です。
スクレイピングの効率的な学習方法
スクレイピングを使うことで、効率良くデータ収集できるのは事実です。しかし一方でスクレイピングを実践する為にはHTMLやHTTP等のウェブに関する知識を一定量必要とします。
Pythonを7年使ってきた筆者の経験から判断して、ウェブに関する知識を体系的に学ぶのは難しいです。なぜならネット上にはほとんどすべての情報が存在している一方で、自分にとって必要な知識が体系的にまとまっているものは存在していないからです。一人ひとり実現したいことが異なるので当然ですよね。
餅は餅屋ではありませんが、効率良く学習するためには、質問できる環境が大切です。自分の周りにウェブについて詳しい人がいる場合は、迷わず助言を求めましょう。1人で解決しようとするならば、膨大な時間が必要となってしまいます。
もし周りに詳しい人がいない場合は、プログラミングスクールに通うことをオススメします。プログラミングスクールは、必要な知識を体系的に学べるだけでなく、質問できる環境が整っており、その道のプロから的確な回答が返ってきます。効率良く学習するうえでこの上ない環境といえます。
スクールはどこがおすすめ?
Pythonを学習するのにおすすなプログラミングをご紹介します。
TechAcademy(テックアカデミー)
TechAcademy(テックアカデミー)はオンライン型のみのサービスです。オフラインでのサービスはありません。学習方法としては、web上にあるカリキュラムを読んで学習していきます。不明点があれば、Slackでのチャットサポートを利用することによって24時間以内に疑問を解決することができます。ただし、チャットでのサポートは午後15時から午後23時の間しか利用できないので、朝型の方にはあまり向いていないかもしれません。
TechAcademy(テックアカデミー)
公式サイト:TechAcademy(テックアカデミー)|Pythonコース
.Pro(ドットプロ)
.Pro(ドットプロ)は少人数制で集中して学習できる通学型のプログラミングスクールです。最前線で活躍する現役クリエイターの講師陣が対面指導してくれます。座学や講義ベースのプログラミング授業だけではなく、月1回教室で開催される製作発表会やグループワークなど現場に近い環境で学習を進めます。なお、.Pro(ドットプロ)の教室は東京(渋谷区)の1箇所だけなので、関東圏に在住の方でないと難しいかもしれません。
.Pro(ドットプロ)では、リクルーティングスタッフによる就職・転職サポート、フリーランスや個人事業の開業支援などが受けられます。そのほか、6ヶ月間の受講期間後でも講師陣による学習サポートを受けられるので、もし転職活動中であっても心強いですよね。
公式サイト:.Pro(ドットプロ)|AI×Djangoコース
DIVE INTO CODE(ダイブ イントゥ コード)
DIVE INTO CODE(ダイブ イントゥ コード)
DIVE INTO CODE(ダイブ イントゥ コード)
公式サイト:DIVE INTO CODE(ダイブ イントゥ コード)|機械学習エンジニアコース
まとめ
ここまで、Pythonでのスクレイピングについて解説しました。スクレイピングを始める前に知っておかなければならない内容を紹介しました。
特に、違法行為にならないためにも事前のrobots.txtの確認やAPIの有無は確認しましょう。また、PythonでスクレイピングをするにあたってオススメのライブラリとしてrequestsとBeautiful Soupについてご紹介しました。この2つを組み合わせることで強力なスクレイパを自作可能です。
スクレイピングは魅力的な技術です。一方で幅広い知識が要求される分野でもあります。この記事がスクレイピングの広大な世界への足がかりになれば幸いです。
もう一度「未経験者がPythonでスクレイピングを始める前に知っておくべき内容まとめ」を読む ↑
- 【初心者必読】Python初心者でも作れるものや出来ること、学習方法などを解説!
- Python入門編!人気の理由や学習方法、将来性や転職市場など初心者向けに徹底解説!
- Pythonに興味がある方は必読!【Djangoの求人・会社】のあれこれをご紹介!
- 【未経験向け】Pythonの勉強・学習方法を解説!プログラミング初学者必見!
- 【未経験向け】Pythonでデスクトップアプリを簡単に作る方法とは?おすすめライブラリを紹介!
- Pythonで自動化ツールを作れば効率化できることまとめ【未経験者必見!】
- マーケターがPythonを学ぶべき理由を解説!出来ることや学習・活用方も!
- .Pro(ドットプロ)の特徴・強みまとめ|Python、Django、フロントエンドを未経験から習得!
Pythonを活かせるエンジニア転職におすすめな転職サイト・転職エージェント
Pythonやdjangoを活かしたエンジニア転職におすすめな転職エージェント・転職サイトを比較するなら「IT/Web系に強い転職エージェント・転職サイト11選!【現役エンジニア厳選】」という記事を参考にしてください。活かせる言語や業種など、自分の目的や条件にあった職場探しにお役立てください。
Python未経験者が本格的に学習するならスクールがおすすめ
Pythonを『未経験』からでも安心して学べるプログラミングスクールをご紹介します。少しでも気になるスクールがあれば、無料の相談会・体験会に登録してみてくださいね。
- TechAcademy|Pythonコース
業界最大手で完全オンライン。現役エンジニアによる指導で【コスパ良し】です! - .Pro(ドットプロ)|AI×Djangoコース
少人数制の集中講座なので、未経験でも安心して学習できます - DIVE INTO CODE|機械学習エンジニアコース
ネットやSNSでの評判がとても良いスクール。Pythonがしっかり学べます - Aidemy|AI特化のプログラミングスクール
未経験でも【3ヶ月】で本格的なAI人材を目指せるオンラインスクールです - PyQ™(パイキュー)
Pythonの学習に特化。幅広いコースがあるので目的に沿った学習が可能です
Python以外の言語を学べるスクールを比較するなら
もっと多くのプログラミングスクールの中から比較したいという方は、「プログラミングスクール比較11選!社会人や未経験者にもおすすめ!【転職・就職にも有利】」という記事を参考にしてください。
転職付き(転職保証型)のプログラミングスクールの詳細を知りたいかたは、「【無料あり】転職支援・保証型プログラミングスクール比較9選!社会人・学生さんの転職・就職に強い!」をご覧いただき、自分の目標や目的にぴったりのスクールを見つけてくださいね。