スクレイピングとは
スクレイピングとは正確にはウェブスクレイピング(Web scraping)と呼び、ウェブサイトから情報を抽出する技術の事です。
近年スクレイピングはWEB界隈でもHOTな要素の一つでpythonを学習するにあたってスクレイピング目的な方も多いのではないでしょうか。
そうです。pythonこそスクレイピングにおいて最強の言語と呼ばれています。
スクレイピングの注意点
WEBスクレイピングは以下のルールを守って行いましょう
- 著作権法を違反しないよう利用規約の確認を行いましょう
- 連続アクセスは避け時間を空けて(1秒以上)スクレイピングを行いましょう
何故pythonでスクレイピングするのか
スクレイピングはpythonで行うべき理由は様々あるのですが、代表的なところで
- スクレイピング用のライブラリが使いやすくて豊富
- スクレイピングしたデータをまとめる為のライブラリが豊富
- スクレイピングしたデータの加工や編集、分析を行いやすい
ざっと上げて以上のような理由でしょうか。
そうです。すべてpythonが得意とする要素がスクレイピングと繋がっているのです。
スクレイピングしたデータをエクセルに保存してデータを編集してグラフに直して出力する事といった複雑な挙動もpythonなら比較的短いコードで簡単に書くことができます。
スクレイピングのライブラリの紹介
pythonでスクレイピングを行う上で必ずといっていいほどお世話になるライブラリを紹介します。
Requestsの紹介
RequestsはサードパーティーのHTTPライブラリです。
WEBのデータを簡単に取得する事ができます。
pythonには標準ライブラリのurllibが存在するが、Requestsを使用するほうがよりシンプルなコードで記述できますのでおすすめです。
Requestsを使ってみよう
それではRequestsを使って簡単なWEB情報を取得してみましょう。
まずはpip等を使用してダウンロードします。
pip3 install requests
ダウンロードが終わればWEBデータを取得してみましょう。
今回は当サイトIn-OutputのTOPページを取得してみましょう。
import requests r = requests.get('https://html-css-wordpress.com/')
これで変数rはIn-OutputのResponseオブジェクトが収納されています。
Responseオブジェクトには様々の情報が入っていますので、それらを属性毎に呼び出すことができます。例として、urlとヘッダーを出力してみましょう。
import requests r = requests.get('https://html-css-wordpress.com/') print(r.url) print("--------------") print(r.headers)
————–
{‘Content-Type’: ‘text/html; charset=UTF-8’, ‘Link’: ‘<https://html-css-wordpress.com/wp-json/>; rel=”https://api.w.org/”‘, ‘Transfer-Encoding’: ‘chunked’, ‘Content-Encoding’: ‘gzip’, ‘Vary’: ‘Accept-Encoding’, ‘Date’: ‘Sun, 15 Sep 2019 17:32:52 GMT’, ‘Server’: ‘LiteSpeed’, ‘Alt-Svc’: ‘quic=”:443″; ma=2592000; v=”35,39,43,44″‘, ‘Connection’: ‘Keep-Alive’}
urlとヘッダー情報が出力できました。
その他にもRequestsの使い方は様々です。print(r.text)とするとHTMLの内容が出力できるのでこれだけは覚えておきましょう。
Requestsの詳しい解説は別記事で行いたいと思います。
Beautiful Soupの紹介
Beautiful SoupはHTMLやXMLからデータを取得するライブラリです。
探索、検索、修正を行うことができるので、Requestsやurllibで取得したデータを解析して、必要なデータのみ綺麗に抽出してくれます。
Beautiful Soupを使ってみよう
まずはBeautiful Soupをダウンロードしましょう。
pip3 install beautifulsoup4
それでは、さっそくRequestsで取得したデータから必要な情報を出力してみましょう。
h2タグを抜き出そうとしたのですが、実行結果が長くなりましたので、h3タグを出力するコードを書いてみたいと思います。
import requests from bs4 import BeautifulSoup r = requests.get('https://html-css-wordpress.com/') r.encoding = r.apparent_encoding bs = BeautifulSoup(r.text, 'html.parser') for i in bs.select("h3"): print(i.getText())
初心者の為のHTML学習【基礎編】
初心者の為のCSS学習【基礎編】
初心者の為のpython学習【基礎編】
h3の情報が出力できました。
CSSの理解が前提知識となりますが、class指定やidを指定すると、より細かく指定ができるようになるので、必要な情報のみ抽出する事が可能となります。
入門編は以上です。次回はseleniumの解説と画像URLの抽出を解説します。