Python

[初心者]スクレイピングとは?Pythonスクレイピングをやってみよう!

スクレイピングとはそもそも何か分からない。なんとなく知っているけどなんだか難しそう。

今回は、そんな思いを解決しています。
実際に手を動かして簡単にスクレイピングをやってみましょう!

スクレイピングとは?

クレイピングとは、webスクレイピングとも呼ばれ、簡単に言うと情報を取得して新たな情報に加工することを言います。

これにより、手動でデータを収集する手間や時間を削減することができます。

また、1度プログラムを作ってしまえば再度、同じサイトから情報収集する際も簡単に情報収集することができます

スクレイピングとクローリングの違い

スクレイピングとよく比較されるものとして、「クローリング」という技術があります。

両者の大きな違いは、情報を加工するかしないかです。

スクレイピング:加工する
クローリング:加工しない

クローリングは、web上から情報を収集するのに対し、スクレピングとは不要な情報を削り必要な情報を取得してくれます。

ざっくりこんな違いがあるんだくらいで覚えておきましょう。

スクレイピングの活用例

スクレイピングがどんなことに使われるのか?それはもちろん情報収集を行う時です。

活用例としては、価格情報、市場調査、不動産、ニュース、株価などさまざまな場面で用いられる。

ランサーズやクラウドワークスなどのクラウドソーシングでも多数の案件があるので、参考までに見てみるのもいいかもしれません。

実際にスクレイピングやってみよう!

ざっくりスクレイピングについて理解できたところで、実際に手を動かしていきましょう!

今回は、yahooニュースの主要タイトルを取得してみます。

Webスクレイピングで使用するライブラリ

スクレイピングよく使われるライブラリとしてRequests、Beautiful Soup、Seleniumがあります。

Requests

このRequestsを使用するとwebサイトの情報取得や画像の収集などを簡単に行えます。

Requests ライブラリを、他のライブラリと組み合わせて使用します。

BeautifulSoup

HTML や XML から狙ったデータを抽出するためのライブラリです。

公式ドキュメントの冒頭の説明を見るとこれは HTML や XML のパーサーそのものではなく、パーサーをラップして扱いやすくするライブラリのようです。

Selenium

Seleniumはwebブラウザの操作を自動化するためのフレームワークです。

Webスクレイピングでは、JavaScriptが使われているサイトからのデータ取得や、サイトへのログインなどに使用されます。

今回は、使用しないのでこんなライブラリがあるんだくらいにしておきましょう。

環境構築

本記事ではAnacondaを使用します。

Anacondaであれば、標準ライブラリとして存在しているはずです。

conda list

これでインストールされているか確認してみましょう。

Anacondaの環境構築については、『[MacOS]Anacondaの環境構築を画像付きで解説します』が参考になります。

[MacOS]Anacondaの環境構築を画像付きで解説しますMacOSでのAnaconda環境構築方法について画像付きで解説します。画像付きなので、初心者でも簡単に環境構築を行えます。...

データ抽出

BeautifulSoupの基礎的なデータ抽出方法については、記載しておきます。

yahoo.title #titleタグを取得する。
yahoo.title.string #titleタグで囲まれた文字列を取得する
yahoo.head #headタグを取得する。
yahoo.find('a') #aタグをすべて取得する。
yahoo.find_all('a') #aタグをすべて取得する。
yahoo.a #1つめのaタグを取得する。
yahoo.a.get("href") #hrefの値(つまりurl)を取得する
yahoo.select('a[href^="http://"]') # CSSセレクタ

クラスを取得する場合

yahoo.find('a', class_='class名')
yahoo.find_all('a', class_='class名')
yahoo.select('a.class名')

実装手順

まずは、BeautifulSoupとRequestsをインポートしていきます。

import requests
from bs4 import BeautifulSoup

こんな感じでインポートできます。

今回はYahooニュースを取得したいので、’https://news.yahoo.co.jp’というURLの取得します。

import requests
from bs4 import BeautifulSoup

#request.get('url')でページの情報を格納
html = requests.get('https://news.yahoo.co.jp')

#第一引数:解析したいもの,  第二引数:parser指定
yahoo = BeautifulSoup(html.content, "html.parser")
print(yahoo)

これを実行すると

実行結果(一部抜粋)

取得したHTMLのコードが表示されました。yahooニュースの全ての情報を取得したので、ここからデータを加工していきます。

import requests
from bs4 import BeautifulSoup

html = requests.get('https://news.yahoo.co.jp')

yahoo = BeautifulSoup(html.content, "html.parser")

for title in yahoo.find_all("a",class_="sc-frDJqD bJCuGd"):
    #getText()でテキスト情報を取得する
    print(title.getText())

実行すると

欧州で近く感染抑制の可能性WHO
米 IS指導者死亡後も「脅威残る」
4年前刺殺事件 当時近所の男逮捕
「ギャラ飲み」申告漏れ多発か
Amazon 米プライム会費値上げへ
五輪速報 フィギュア団体ペアSP
チェンと宇野 6.25点差はどこに
橋幸夫が引退へ思い 死怖くない

現在のyahooニュースの主要タイトルが表示されるようになります。

これで以上になります。

購読ありがとうございます。