PythonではWeb上の情報、DataをScraping(スクレイピング:抽出)することが可能です。ここではPythonにおけるScrapingの概要について解説しています。
Scrapingとは
Scraping(スクレイピング)とは、Web上の情報、Dataを抽出することを指します。任意の情報、Dataを抽出するとき、そのサイト構造を理解しておかなければなりません。Scrapingしても広告や不要な情報を抽出してしまうと、サーバーに負荷をかけただけになってしまいます。
似た言葉に「Crawling(クローリング)」があります。こちらの意味はWebサイトを定期的に巡回し、情報をダウンロードすることです。「Crawler(クローラー)」と呼ばれたりするものです。例えば、検索エンジンがクローラーとしてWebサイトの情報をデータベースに格納するなどが挙げられます。
Scrapingでできること
Scrapingの一例として、以下が挙げられます。
- 株価の取得
- 記事タイトルの取得
- その他、任意の情報取得
他にも多くの使用方法がありますが、本サイトで紹介しているものを中心に取り上げました。
以下のリンク先では、Scrapingする方法について具体的なサイトを用いて紹介しています。
・株価のスクレイピング方法
>>>株価のスクレイピング
・ニュース(トップページ)のスクレイピング
>>>noteの「編集部のおすすめ」記事のタイトルをスクレイピング
・その他、任意の情報取得
>>>青空文庫における任意の作家の作品リストのスクレイピング
Scrapingの手順
いきなりScrapingを行うのではなく、目的、対象、コード、解析内容を設計することをおすすめします。
理由としては、抽出したい情報を変える必要が出てきた時、その度にプログラムを書き換えていたら時間がかかってしまいます。また、初心者にありがちな苦労してScrapingしたのにもかかわらず、抽出しただけで終わってしまうことを防ぎます。
目的は?
はじめにScrapingを行う目的を明確化します。
- その情報は何に使用するのですか?
- 抽出したい情報はどのようなものですか?
目的を明確化する理由としては、大きく2つあります。
1つ目はScrapingで得た情報のゴールを明確化することで、Scrapingして終わりになることを防ぐためです。例えば、株価を取得する場合はその株価情報を用いてLineに通知させるなど、とすることをおすすめします。
2つ目に後述の「対象」に繋がるのですが、情報によってはわざわざ自分でScrapingのプログラムを書かずともAPIなどが提供されていたりします。その場合、APIを呼び出すだけで簡単に抽出が可能です。
対象は? ⇒ サイトorAPI
目的が明確になったら、その情報はどのようにScrapingするか明確化する必要があります。
- Webサイトからの取得→サイト構造を把握
- APIからの取得→APIの使用方法を把握
Webサイトからの取得だったら、そもそもScrapingが禁止されていないか。問題がなければ、サイトのどこに情報があるのか把握する必要があります。例えば、サイト内の全てのh2を取得する必要があるのか、それとも上から数個で良いのか、など明確化する必要があります。
APIが提供されている場合は、APIを使用するためのKeyが必要だったりします。提供しているサイト元を見て、ルールなどを把握する必要があります。例えば、楽天だったら「Rakuten Developers」を参照してKeyを取得する必要があります。
プログラム作成
どのように情報を取得するかが明確になったら、実際にプログラムを作成していきます。その際に注意することがあります。
- Webサイトの場合、サーバに負荷がかかっていないか?
- APIの場合、取得制限に引っかからないか?
Webサイトから情報を取得する際、対象サイトへ時間を空けずにアクセスしていないか?などを考慮したプログラムを作成する必要があります(time.sleep()などを使用する)。
APIを使用する場合、夢中になって試しで何度もリクエストをしていると、上限に引っかってしまう場合があります。また、ルールを守っていないとアクセス拒否されてしまいます。
解析 ⇒ 結果は?
目的で明確にしたゴールに向けてScrapingした情報を解析をします。
- Scrapingした情報は予想通りか?
- 着地点まで走れるか?
取得した情報は必要だったものか確認する必要があります。例えば、株価を取得するつもりだったのに出来高の数値を取得していないか?などです。
Scrapingしたのは良いけど、それで終わっていないか確認して下さい。Scrapingのその先までしっかり走りきって下さい。例えば、取得情報を基に数値解析をする、Lineに通知するなど有効活用すると良いです。
Scrapingを行う前に確認すること
Scrapingを行う前に確認(注意)しておかなければならないことがあります。
項目 | 内容 |
対象サイトが禁止していないか | Scrapingはサーバーに過度な負荷がかかる場合があります。その場合、そのサイトが停止してしまったりして業務や運営に支障をきたします。そのような事を回避するためにScraping自体を禁止しているサイト(Yahoo!ファイナンスなど)があります。 |
対象サイトの構造 | Scrapingする上で抽出したい情報がどこにあるのか把握しておく必要があります。間違った情報を抽出しても何の意味もありません。また、APIなどが提供されている場合は、取り扱い方を公式サイトなどで確認しておく必要があります。 |
上記に気を付けてScrapingして下さい。
Scrapingの方法
Scrapingの方法を4つに分けています。各リンク先に詳細を記しています。
項目 | 内容 |
urllibを用いたスクレイピング方法 | 「urllib」はPythonの標準ライブラリでURLを取り扱うものです。簡単にサイトへアクセスすることができるライブラリです。 |
BeautifulSoupを用いたスクレイピング解析方法 | 「BeautifulSoup」はHTMLやXMLの解析をするライブラリです。「urllib」と組み合わせて情報を抽出して、解析する際に使用するものです。 |
ブラウザを用いたスクレイピング方法 | 「Selenium」と「ChromeDriver」などのDriverを用いることでブラウザを通して画面をキャプチャなどができます。サンプルコードを用いて解説しています。 |
APIを用いたスクレイピング方法 | APIが提供されているサイトでは、スクレイピングして情報を抽出することが簡単にできます。APIは企業だけではなく公的機関からも提供されており、広く利用できる優れものです。ここでは、サンプルコードを用いて解説しています。 |
おすすめの書籍
Scrapingを勉強する上でおすすめの書籍です。
Scraping方法だけではなく、収集した後の情報の整理、解析まで丁寧に示されています。また、電子書籍版があるのが個人的には有り難いです。
こちらもScrapingだけではなく、その後の情報の使用方法まで明示されているのがおすすめです。機械学習などもまとめて学べるのでおすすめです。
単なるデータの収集だけではなく、データサイエンティストとして加工するまでの道のりが示されている一冊です。全くの初心者向けというよりは少し勉強したことがある方向けのものになっています。電子書籍版があり便利なので挙げました。