Webサイトから企業の情報を収集して、マーケティングに活用したり、自社とライバル関係にある商品の価格動向や評価などを収集して解析したりする事を人力で行えば、非効率なだけでなく無駄な人件費が発生する場合もあります。
この問題を一発解決するのが、「webスクレイピング」です。
スクレイピングで日々の業務が自動化され無駄な作業から解放されます。
特にPythonには、スクレイピングに関するライブラリ・フレームワークが豊富で、個人的にはスクレイピングはPython一択と思っています。
業務の自動化・効率化は、何も企業の取り組みだけでなく、国も補助金・助成金の支給条件として「業務効率化」をマストにするケースも増えています。
Pythonのスクレイピングをある程度までマスターすれば、間違いなく仕事が取れますので頑張ってマスターしましょう!
今回の記事では、
①webスクレイピングの解説
②スクレイピングで何が出来るのか?
③Requests+Beautiful Soupで行う簡単なスクレイピング
④スクレピングを行う上で学んでおきたい知識
などを中心に解説していきます。
Pythonのスクレイピング基本
それでは早速、Pythonのwebスクレピングについて解説します。
Webスクレイピングとは?
スクレイピング(scraping )は日本語で「削ること」です。
つまりWebスクレピングとはインターネットからプログラムを使って機械的に情報を集めて、不要な情報を削って必要な情報を抽出することです。
スクレイピングを行うプログラムを一般的には「スクレイパ」と呼びます。
クローリングとスクレイピングとの違い
混同されがちですが、クローリングとスクレイピングは違いがあります。
クローリングはwebページのハイパーリンクを辿って次々にwebページを収集することです。スクレイピングの様にデータの抽出は行いません。
超便利で誰でも使えるクローラーとしては、「wget」です。
wgetについては以下をご覧ください。
→wgetのオプション -rでサイトを丸々ゲットする
Webスクレイピングで何ができる?
スクレイピングは情報の「収集」と「抽出(整理)」を行います。具体的に出来ることの一例は以下の通りです。
- 大手ECサイトの商品情報収集
- ニュースサイトから記事のタイトルとurlを取得
- 必要な株価データの取得
- Googleの検索結果の取得や、検索結果10以内のサイトに掲載されている必要な情報を収集
- 営業リストで使う企業情報の収集
これらの情報収集と抽出を自動的に行うことが出来るため、業務の効率化につながります。
さらに、抽出したデータを元に「分析」しマーケティングに役立てる事も可能です。
Requests+Beautiful Soupで行う簡単なスクレイピング
まずwebページを簡単に取得できるRequestsを解説します。
Requestsとは?
Requestsを使うと、簡単にwebサイトの情報を収集したり画像を収集する事が出来ます。
Pythonには標準ライブラリにurllibがあり、Requestsと同様の働きをしますが、
Requestsの方が使い方が簡単だけでなく、「収集」した情報の「抽出(整理)」に使うBeautiful Soupと組み合わせて使う事が出来るため
情報の「収集」にはRequestsを使いましょう。
Requestsのインストール
早速、Requestsライブラリをインストールしましょう。インストールは、MACはターミナル、windowsはコマンドプロンプトを使い
pipコマンドでインストールします。(Pipはpythonに同梱されています。)
pip install requests
requestsの記述方法
requests.メソッド(url, オプション)
メソッドには「get」や「post」などを指定します。
urlには情報を収集したいWebサイトのURLを記述します。
requestsで主に使われるメソッドやオプションの指定方法などは、今後、詳しく解説します。
サンプルプログラム
今回のサンプルは、requestsを利用して当サイトのトップページの情報を取得してみます。
当然、Requestsは標準ライブラリではないので、import して使います。
import requests
r = requests.get("https://sigotonosozai.com/")
print(r.text)
実行結果
<!DOCTYPE html>
<html lang="ja" prefix="og: http://ogp.me/ns#">
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#">
<meta charset="UTF-8">
<title>webのお仕事 | ホームページ制作にまつわる備忘録</title>
<link rel='stylesheet' id='dashicons-css' href='https://sigotonosozai.com/wp-includes/css/dashicons.min.css?ver=5.2.7' type='text/css' media='all' />
<link rel='stylesheet' id='admin-bar-css' href='https://sigotonosozai.com/wp-includes/css/admin-bar.min.css?ver=5.2.7' type='text/css' media='all' />
<link rel='stylesheet' id='wp-block-library-css' href='https://sigotonosozai.com/wp-includes/css/dist/block-library/style.min.css?ver=5.2.7' type='text/css' media='all' />
<link rel='https://api.w.org/' href='https://sigotonosozai.com/wp-json/' />
<link rel="stylesheet" href="https://sigotonosozai.com/wp-content/themes/lionmedia/style.css">
<link rel="stylesheet" href="https://sigotonosozai.com/wp-content/themes/lionmedia/css/icon.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,900">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="dns-prefetch" href="//www.google.com">
<link rel="dns-prefetch" href="//www.google-analytics.com">
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<link rel="dns-prefetch" href="//fonts.gstatic.com">
<link rel="dns-prefetch" href="//pagead2.googlesyndication.com">
<link rel="dns-prefetch" href="//googleads.g.doubleclick.net">
・・・(省略)・・・
Beautiful Soupを使った簡単なスクレピング
Beautiful Soupのインストールやライブラリ等の解説は、いずれ記事にしますが、まずは簡単なサンプルプログラムを紹介します。
BeautifulSoupとは?
スクレイピングは「収集」と「抽出(整理)」の2つをセットに行われます。
先ほど紹介したRequestsが「収集」を行うライブラリですが、「抽出(整理)」を行うライブラリが
BeautifulSoupです。
ちなみに「BeautifulSoup」の名前の由来は、不思議の国のアリスで登場する詩から取ったらしいんですが、
「Python」といい独特のセンスでネーミングしますよね。
BeautifulSoupのインストール
BeautifulSoupをインストールしましょう。
インストールは、MACはターミナル、windowsはコマンドプロンプトを使いpipコマンドでインストールします。
pip install beautifulsoup4
Requests+BeautifulSoupで行う簡単なスクレイピング
BeautifulSoupも標準ライブラリではないので、importして使います。
import bs4
使用するオブジェクトが決まっているのであればfrom モジュール名 import オブジェクトで記述しても良いです。
from bs4 import BeautifulSoup
この記述の場合は、モジュール全体をインポートしないので、指定した以外のオブジェクトを利用しようとすると当然エラーになります。
それでは、Requests+BeautifulSoupを使って当サイトのトップページをグリグリしましょう。
トップページをからタイトルを取得
import requests
from bs4 import BeautifulSoup
source_html = requests.get('https://sigotonosozai.com/')
soup = BeautifulSoup(source_html.text, "html.parser")
title = soup.title.string
print(title)
print(soup.title)
実行結果
webのお仕事 | ホームページ制作にまつわる備忘録
スクレピングを行う前に必ず知っておきたい事
スクレイピングは、日々のルーチンワークをシステム化し業務効率化に寄与したり、
データ解析に使える情報源として貢献したりと良い事尽くめです。
但し、実際にスクレイピングを行う際には必ず以下の3点をクリアしなければいけません。
1.著作権を侵害しない
2.利用規約に抵触する時には、スクレイピングを避ける
3.サーバーへの過度な負担を避ける
1.著作権を侵害しない
著作権者の同意なく、著作物をコピーしたりサーバーに勝手に保存したりすると、原則違法行為となります。
だったらスクレイピングは違法じゃないかとなりますが、安心してください。
自分自身の身の利用目的で情報解析を目的とした場合は、著作権法には触れないので大丈夫です。
2.利用規約に抵触する時には、スクレイピングを避ける
スクレピングを行おうとしているサイトの利用規約にスクレピング禁止が明示されている場合は、実施しない方が賢明です。
ただスクレイピングを禁止しているサイトに対してスクレイピングを行ったら、直ちに「利用規約違反」かと言えば、そうともいえないのです。
ユーザーがその利用規約に同意している場合は、上記の行為は「利用規約違反」の可能性が高まりますが、会員登録をせずスクレイピングの該当ページが誰でも閲覧できる場合は、サイトとユーザーに契約関係がないため「利用規約違反」にはなりません。
3.サーバーへの過度な負担を避ける
岡崎市立図書館の蔵書検索システムへ執拗にリクエストを送りアクセス障害が発生し、偽計業務妨害容疑でお縄になったいわゆる
「Librahack事件」は有名です。
スクレピング自体が違法であるという事ではなく、相手方のサーバーへの負荷をかけた事が問題なのです。
ただ、どのような頻度や処理時間が、偽計業務妨害にあたるかの明確な基準がないため、
スクレイピングを実施する際には、必ず事前にテストをした上で、
スクレイピングの頻度や処理件数を自ら制限をかけて行う事が重要であると考えます。