【保存版】Pythonでスクレイピングする方法を初心者向けに徹底解説!【サンプルコードあり】
Pythonでは、スクレイピングという技術を使って、日々の業務を自動化することができます。今回の記事では、
- スクレイピングという技術で何ができるようになるのか
- スクレイピングをする際に学んでおいた方がよい知識
- スクレイピングを学ぶ際に利用すべきWebサイト
などについて解説していきます。
結論から言うと、業務の自動化までが目標なら、ProgateやPyQなどのお手頃なサービスで学ぶのがおすすめです。
ただし、スクレイピングを学んでいく中で
- スクレイピングがうまくできず、調べても原因が不明
- 取得したデータをどのように活用していいかがわからない
- 学んだことをどう実践していいかわからず、周りに相談もできない
など、壁にぶつかることも多くあります。周りに相談できるエンジニアがいればいいのですが、周囲にスクレイピングに詳しい人がいない場合はプログラミングスクールの活用がおすすめです。
・スクレイピングだけでなく、取得したデータの分析や活用まで本格的に学びたい
・せっかくだからPythonを学んだ経験を今後の転職活動に活かしたい
→スクール卒業後もデータ分析を学び放題&転職支援もあるキカガク
→3ヶ月〜のコースでPythonを基礎から実践まで学べるAidemy Premium Plan
・とりあえずスクレイピングで日々の業務効率化を達成したいが、独学でつまづいている
→Python/機械学習の基礎を習得したいならTechAcademy
→業務効率化に興味があるならCodeCamp
上記のスクールはどれも無料カウンセリングを受け付けています。スクール名をクリックすれば公式サイトに移動できるので、気軽に申し込んでみましょう。
目次 (PRも含まれます)
✓この記事の読者の想定
こんな悩みを持っている方向けにまとめていきます!
- Pythonのスクレイピング方法を知りたい
- 日々の業務を自動化したい
- プログラミングで何ができるのか知りたい
- スクレイピングを学べるおすすめサービスを知りたい
スクレイピングとは
スクレイピングとは、Webページの情報を取得することができる技術のことです。
例えば、日経平均のデータを毎日エクセルに記録する場合、これを毎日人力で
- Webサイトにアクセスする
- 該当する箇所をメモしてエクセルに貼り付ける
- これを繰り返す
とやっていたら、相当な手間がかかりますよね?
ほかにも例えば、あるWebサイトから、10記事分のデータを収集し、画像を全てダウンロードするとします。これも
- Webサイトのページ一つ一つにアクセスする
- ページの画像を1枚1枚フォルダにダウンロードする
- 次のページに移動する
- ページの画像を1枚1枚フォルダにダウンロードする
という風にやっていったら、らちがあかないですよね?
Pythonを利用したWebスクレイピングを行えば、指定した文字、ファイルなどを、プログラムで自動収集することができるようになります。
Pythonを利用したWebスクレイピングの活用方法
僕自身はWebマーケターなのですが、日々Pythonを利用して、スクレイピングを利用します。いくつか具体例を提示したいと思います。
Webサイトの関連キーワードを自動取得し、リバースエンジニアリング
あるキーワードを検索した際に、Googleの検索関連キーワードを取得できますよね。下の画像のような部分です。
関連キーワードを一つ一つさらに検索をかけると、そのキーワードに関する関連キーワードを取得することができます。
- 検索キーワードで検索
- 関連キーワードを取得
- 一つ一つ関連キーワードを検索して、その関連キーワードをCSVに出力
手動で取得するには、上記のステップを繰り返していかないといけません。
しかしスクレイピングを利用すれば、すべて自動で収集することができます。
ニュースサイトの過去のブックマーク数をCSVに一括ダウンロード
あるニュースサイトでブックマークされた過去記事を20年分さかのぼり「どういうキーワードが記事タイトルに含まれるとバズりやすいのか」を分析しました。
手動でやれば丸1日以上かかる作業ですが、この時もスクレイピングを利用して5分で完了。さらにPythonを利用して過去1万件の膨大なデータを分析しました。
このように、Pythonを利用したWebスクレイピングを利用すると、簡単に情報を自動収集することができるようになります。
PythonでWebスクレイピングするために必要な知識
PythonでWebスクレイピングするために必要な知識をまとめておきます。
HTML
HTMLは、このページを記述している文書です。F12ボタンをクリックすると、このWebサイトのソースが見れるかと思いますが、これがHTMLです。
Webスクレイピングは、結論からいうとURLからHTMLを読み込んで、データを収集することになります。ですので、HTMLの理解が最低限必要になります。
CSS
さらに、HTMLのうちどこを取得するかという問題なのですが、そこでCSSが出てきます。例えば、あるタグの中のここの一部分をとりたい!みたいなときに、CSSを利用して取得することになります。
JavaScript
JavaScriptはマストではないのですが、学んでおいた方がいいです。後述するSeleniumなどを利用する際に、利用します。
例えば、あるページを下にスクロールしたりする場合、JavaScriptのコードをスクレイピングのライブラリ上で利用することがあります。かゆいところに手が届かないときに、JavaScriptを利用することがあるので、覚えておきましょう。
Pythonでスクレイピングを行うためのライブラリと活用方法
PythonでWebスクレイピングをする方法は、いろいろありますが、代表的なのは以下の方法です。
- Requests / BeautifulSoupを利用する
- Seleniumを利用する
1. Requests / BeautifulSoupを利用する
初学者の人の場合は、Requests / BeautifulSoupがおすすめです。
Requestsは、Pythonライブラリでして、HTTPの通信を行うことができるライブラリとなります。
もう少し簡単にいうと、あるページにアクセスしたり、データを送ったりするネットワーク処理を操作できるライブラリですね。
簡単なデータであれば、RequestsとBeautifulSoupを利用すれば、取得することができます。
Seleniumを利用する場合
さて、Seleniumは、仮想ブラウザを立ち上げて、ブラウザを自動操作することでスクレイピングを行うことができるライブラリです。(※もともとはブラウザテストで利用するツールです)
Seleniumを使うメリットは、以下のような点があります。
- Requestsだと認証でつまづくが、Seleniumだとブラウザ操作でログイン情報を入力したりできるので、ログインが必要なサイトからのデータ取得が簡単
- Requestsだと、あるWebページの一番下までいくと読み込まれるデータが存在する場合取得することができないが、Seleniumだと仮想ブラウザを操作して、JavaScriptでスクロールさせることができるので、データを取得することができる
- ECサイトでボタンをクリックしないと出てこないデータがあって、Requestsだと取得することができないが、Seleniumだとクリックイベントなどをプログラムで操作することができる。
- RequestsだとBot判定されて、スクレイピングすることができないが、Seleniumだと実際のブラウザを立ち上げて自動操作するので、Bot判定に引っ掛かりにくい
一方で、Seleniumを利用する場合、以下のようなデメリットがあります。
- Requestsと比べると重い。ブラウザを一個立ち上げているのと変わらないので、高速処理したいときには不向き。
- Chroniumなどの仮想ブラウザ(ドライバー)を設定する必要がある。Linuxの知識がないと設定が難しい。
PythonでWebスクレイピングする際のサンプルコード
それでは、サンプルコードです。
Requests
まず、Requestsを利用したサンプルコードです。
ある記事から、そのページのURLをすべて取得してCSVに落とすスクリプトの一部となります。
import requests
response = requests.get("https://review-of-my-life.blogspot.com/")
print (response.text)
html_doc = requests.get("https://review-of-my-life.blogspot.com").text
soup = BeautifulSoup(html_doc, 'html.parser') # BeautifulSoupの初期化
print(soup.prettify())
# TODO1 このページのaタグをすべて抜き出してください。(HTMLの内容)
real_page_tags = soup.find_all("a")
for tag in real_page_tags:
print(tag)
# TODO2 このページのaタグをすべて抜き出してください。(HTMLの内容)
for tag in real_page_tags:
print(tag.string)
# TODO3 このページのaタグをすべて抜き出してください。(HTMLの内容)
for tag in real_page_tags:
print(tag.get("href"))
Selenium
Seleniumのサンプルコードです。ここでは、Google検索で取得した関連キーワードを検索して、さらに関連キーワードを取得するスクリプトとなります。
from selenium import webdriver
import time
import requests
import json
from bs4 import BeautifulSoup
import pandas as pd
import sys
import time
import os
args = sys.argv
root_query = input("キーワードを入力してください: ")
browser = webdriver.Chrome(os.getcwd() + "/chromedriver.exe")
columns = ["root_query", "branch_query", "query_name"]
df = pd.DataFrame(columns=columns)
browser.get('https://www.google.co.jp/search?num=100&q=' + root_query)
time.sleep(1)
tags = browser.find_elements_by_css_selector("p.nVcaUb")
print (tags)
related_words = []
counter = 0
for tag in tags:
branch_query = tag.text
print (branch_query)
related_words.append(branch_query)
se = pd.Series([root_query, branch_query,branch_query ], columns)
df = df.append(se, ignore_index=True)
related_words_num = len(related_words)
print (str(related_words_num) + "件関連キーワードを取得しました")
print (related_words)
counter = 1
for related_word in related_words:
print (str(counter) + "/" + str(related_words_num))
browser.get('https://www.google.co.jp/search?num=10&q=' + related_word)
second_tags = browser.find_elements_by_css_selector("p.nVcaUb")
for tag in second_tags:
branch_query = tag.text
print (branch_query)
se = pd.Series([related_word, branch_query,branch_query], columns)
df = df.append(se, ignore_index=True)
counter+=1
time.sleep(3)
df.to_csv(root_query + ".csv")
print ("CSVに出力しました")
PythonでWebスクレイピングする際の注意点
PythonでWebスクレイピングする際の注意点です。
- Webサービスの利用規約で、スクレイピングが禁止されていないか確認する
- Webサービスに過度な負担をかけないようにする
Webサービスの利用規約で、スクレイピングが禁止されていないか確認する
サービスによっては、個人情報保護、荒らしを防止するためにスクレイピングを禁止しているサービスがあります。僕が知っている範囲では以下の通りです。
例えば、マッチングアプリ Pairsは、利用規約で明確にスクレイピングやクローリングを禁止しています。
当社は、投稿コンテンツの利用を、利用者自身を除く、他の利用者その他の第三者に許諾するものではなく、利用者は他の利用者の投稿コンテンツの権利を侵害する行為を行ってはならないものとします。また、利用者は投稿コンテンツをクロール等で自動的に収集、解析する行為も行ってはならないものとします。(利用規約 | Pairs)
同様に、Twitter社も利用規約にスクレイピングを禁止しています。
Twitterから提供されている当社の現在利用可能な公開インターフェースを経由する(かつ、その使用条件を遵守する)ことなく、その他の何らかの手段(自動その他を問わず)でTwitterにアクセスまたはその検索を行うか、またはアクセスまたは検索を試みること。ただしTwitterと別途締結した契約によりこれを行うことが特に認められている場合は、この限りではありません。Twitterのクローリングは、robots.txtファイルの規定による場合には許可されます。ただし、Twitterの事前の承諾なしにスクレイピングを行うことは明示的に禁じられています。(ルール | Twitter)
日本では、裁判沙汰になる問題はあまりありませんが、海外では多く見られます。
Webサービスに過度な負担をかけないようにする
また、Webサービスに過度な負担をかけないようにしましょう。基本的には大規模なデータを取得する場合は、timeモジュールのsleepメソッドを利用して、待機時間を入れるのが礼儀です。
スクレイピングをする際に知っておいた方がよい知識と学習方法
スクレイピングをする際に前提として理解しておくべき知識です。
HTML / CSS
さきほど解説したように、HTMLはこのページのマークアップをしている言語で、CSSはHTMLを装飾する言語です。
HTML、CSSはスクレイピングで「ここを抜き出して!」と命令出すときに理解していないと難しいので、勉強しておきましょう。
HTMLやCSSの学習には、「Progate」というサービスがおすすめ。月額1,078円(税込)、ツールの導入なども不要で、Webブラウザがあればすぐ学習を始められます。
JavaScript
JavaScriptはブラウザの動的な操作を制御するために利用します。スクレイピングでJavaScriptを利用する場合、
- ブラウザで特定のボタンをクリックする
- ブラウザを一番したにスクロースする
などを行う場合にJavaScriptが必要になります。こちらもProgateで学んでおきましょう。
Python
Pythonは、サーバーサイド言語のひとつのです。スクレイピングを行う際の処理はすべてPythonで実行します。Pythonの基礎はProgateで勉強してください。
また、Pythonを動作させるためには、Pythonの環境構築を行う必要があります。初学者には難しいと思うので、Google Colaboratoryを利用してPythonを動作させるのがおすすめです。特に難しい環境構築をせずとも、すぐにPythonをブラウザ上で動作させることが可能です。
Pythonでスクレイピングを学べるサイト・スクール
最後に、Pythonでスクレイピングを学べるサイト・スクールについて紹介します。
プログラミングスクールのおすすめは以下の4社です。
・スクレイピングだけでなく、取得したデータの分析や活用まで本格的に学びたい
・せっかくだからPythonを学んだ経験を今後の転職活動に活かしたい
→スクール卒業後もデータ分析を学び放題&転職支援もあるキカガク
→3ヶ月〜のコースでPythonを基礎から実践まで学べるAidemy Premium Plan
・とりあえずスクレイピングで日々の業務効率化を達成したいが、独学でつまづいている
→Python/機械学習の基礎を習得したいならTechAcademy
→業務効率化に興味があるならCodeCamp
また、「プログラミングを今までやったことがない」「とりあえず自力でどの程度までできるかやってみたい」という人には、以下のWebサイトで学習することをおすすめします。
キカガク
キカガク公式: キカガクは、給付金をもらってお得に学習しながらAI人材を目指すことができる、完全オンラインのプログラミングスクールです。 引用:キカガク公式 キカガクの講座は、Udemyでも高い評価を得ており、1つのコースで35,000人以上が受講している講座もあります。 実際、受講した方の生の声を見てみても、非常にポジティブなものばかりでした。(受講された方のレビューはこちらから) ※また、キカガクは一度スクールに申し込むと、全ての講座を無期限で受講することができるのでかなりお得です。 キカガクでは、無料体験を申し込むだけでUdemy上で高い評価を得たコースを実際に体験することができます。 受講できるコースは以下の2つで、合計20時間分の学習動画無料になります。 整理すると、キカガクは以下の方におすすめです。 ※キカガクの講座の無料体験は、3分ほどですぐに学習を始めることができます。
https://www.kikagaku.ai/コースの特徴
オンライン動画学習サービス、Udemyでも絶賛された高品質の学習コンテンツ
実際の講座を受講前に体験することができる
Aidemy Premium Plan
Aidemy(公式):https://premium.aidemy.net/
Aidemyは、AIに特化した東大発のプログラミングスクールです。
東証一部上場企業のAI研修などもおこなっている、日本最大級のAI教育サービスを提供しています。
AIを本格的に学べるプログラミングスクールの中でも、非常にハイレベルで高品質のスクールです。
- ある程度Web系のプログラミングを学んでいる
- AIについて本格的に仕事にしたいと思っている
Aidemyでは、Pythonに特化した講座を8種類用意しています。
- AIアプリ開発講座
- データ分析講座
- 自然言語処理講座
- 実践データサイエンス講座
- E資格対策講座
- 機械学習マスター講座
- ビジネスAI対策講座
- 組織を変えるDX講座
各コースの金額は以下の通りです。
3ヶ月 | 6ヶ月 | 9ヶ月 | |
AIアプリ開発講座 | ¥528,000 | ¥858,000 | ¥1,078,000 |
データ分析講座 | ¥528,000 | ¥858,000 | ¥1,078,000 |
自然言語処理講座 | ¥528,000 | ¥858,000 | ¥1,078,000 |
実践データサイエンス講座 | ¥528,000 | ¥858,000 | ¥1,078,000 |
E資格対策講座 | ¥327,800 | – | – |
機械学習マスター講座 | ¥528,000 | ¥858,000 | ¥1,078,000 |
ビジネスAI対策講座 | ¥330,000 | – | – |
組織を変えるDX講座 | ¥330,000 | – | – |
引用:https://premium.aidemy.net/(2023年4月時点。金額はすべて税込価格です)
また、雇用保険の支給要件を満たしている方であれば、以下4つの講座で教育訓練給付制度(専門実践教育訓練)を利用できます。
- AI アプリ開発講座
- データ分析講座
- 自然言語処理講座
- E資格対策講座
対象者であれば、実際に支払った受講料のうち最大70%を支給してもらえる制度です。
Aidemyでは挫折しにくいサポートに加え、一部の講座では残りの受講期間を有意義に使える学び放題システムを利用することもできます。
丁寧なサポートを受けつつ、AIに特化した講座を受けたい方が学びやすいスクールです。
国の給付金を利用すれば安く受講できるので、興味のある方は対象者かどうか一度確認してみましょう。
TechAcademy
2023年4月時点, TechAcademy公式サイトより
TechAcademyは完全オンラインのプログラミングスクールです。
専任のエンジニアがマンツーマンでメンターとしてサポートしてくれます。
TechAcademyでAIを学べるコースとしては
- AIコース
- データサイエンスコース
があります。
AIコースとデータサイエンスコースのポイント
AIコースは、Python x AIを専門に学びたい人におすすめです。
具体的には、
- 機械学習
- ディープラーニング
- クラスタリング
などを、Pythonのライブラリで実装していきます。
一方で、データサイエンスコースは、Python x 統計学を学びたい人におすすめです。
より本格的に
- 統計学の理解
- 統計モデリングの理解
などを行っていきます。
AIコース | データサイエンスコース | |
学習内容 | Python 機械学習 ディープラーニング クラスタリング |
プログラミング 機械学習 数学・統計学 モデルの構築 |
価格/受講期間 | 174,900円 / 1カ月 229,900円 / 2カ月 |
174,900円 / 1カ月 229,900円 / 2カ月 |
公式ページ | https://techacademy.jp/course/ai | https://techacademy.jp/course/datascience |
30秒ほどで無料体験に申し込むと、
- HTML / CSSの学習コースを無料で体験できる
- 1回分の現役エンジニアとのビデオチャットで相談できる
- 無料体験からの本受講で最大1万円引き
という特典があるので、まずは公式サイトから無料体験を受講してみるのがおすすめです!
無料体験はこちら※更新情報 2022年2月2日時点、TechAcademyでは3つの特別割引プランがあります。
①『先割』受講料5%OFF:対象プランに先行申し込みで適応
②『トモ割』10,000円割引:同僚や友人が一緒に受講される場合に適応
(別々のコースになっても割引は適用されます)
③ 『複数コースセット割引』:複数コースをセットで申し込むと、別々に学ぶよりも最大138,000円もお得に。
CodeCamp
CodeCamp公式サイトより:https://codecamp.jp
CodeCamp(コードキャンプ)は、完全オンライン・マンツーマンレッスン型のプログラミングスクールです。
中でも「データの抽出や整理を学びたい」という人におすすめなのが「Pythonデータサイエンスコース」です。
データサイエンス領域の「データ収集」を重視したカリキュラム
Pythonが活躍するデータサイエンスの世界には、
- 「データ収集」
- 「データ加工」
- 「モデル構築」
の3つのフェーズがあります。
データサイエンスコースでは、その中でも「データ収集」フェーズに重きをおいた学習内容となっています。
PythonのWebスクレイピングテクニックを使ってWeb上から必要なデータを抽出し、Excelやcsvの形に整理するというような、実務で役立つスキルを会得できるでしょう。
このスキルを会得すれば、面倒な単純作業をPythonにやらせることができるようになります。
気になる人は、無料体験レッスンで内容を体験してみてください。
他の割引キャンペーンよりもお得に受講するチャンスです!
(当クーポン以外の割引キャンペーンとの併用はできません)
DAINOTE記事経由でCodeCampの無料オンラインカウンセリングを受けるだけ!
カウンセリング完了後のアンケートにクーポンコード694076を入力してください。
※1万円OFFクーポンなどの他キャンペーンとの併用不可
※クーポン取得後は7日間の利用期限があります
※アンケートに回答後、割引適用の詳細をメールでお知らせします。実際にメールが届くまでに最大で24時間程度かかることがあります
※アンケート回答後24時間経過してもメールが届かない場合は、迷惑メールBOXを確認してください
データサイエンスコース | |
料金 / 期間 | 受講料金 165,000円(税込) / 2ヶ月 + 入学金 33,000円(税込) |
学習内容 | Pythonを利用したデータ収集 |
公式 | https://www.lp.codecamp.jp/python |
CodeCamp(公式):https://codecamp.jp
Progate
Progateは環境構築不要、かつ無料でプログラミングが学習できるWebサービスです。
教材はスライドと問題集を一緒にしたような形式で「知識を学ぶ→手を動かす」を繰り返してプログラミングを学んでいきます。初めてプログラミングに触れる人でもわかりやすい構成で、楽しくプログラミングが学べます。
まだ技術書や学習サービスを利用したことがない人も、まずはProgateを使うといいでしょう。
Progateの料金プランはこちら。
範囲 | 料金 | |
無料版 | 各コース基礎レベル | 無料 |
有料版 | 各コース応用レベル | 税込1,078円/月 |
実際に使ってみた感想ですが、技術書を買うよりも、短期集中でProgateに課金して学習する方がコストパフォーマンスは高いです。
PyQ
PyQは、Pythonに特化したプログラミング学習サイトです。Web APIの利用方法や、スクレピングの基礎等を詳しく解説してくれています。
実際に僕も登録して、レビュー記事を書いてみたので、興味がある方はぜひ!
≫評判のよかったPyQを実際に試してみたら、予想以上によかったので感想を書いてみた
PyQ公式サイトもこちらにまとめておきます。
コードを書かずにスクレイピングすることもできる
もちろんPythonを利用したほうが、細かい部分のスクレイピングを行うこともできます。
ただ、簡易的にスクレイピングを実行する場合は、ツールを利用してスクレイピングすることもできます。
- Google Spreadsheet + Google Apps Script
Google Spreadsheet
あの有名なGoogle Spreadsheetでも、実はスクレピングができます。
IMPORTXML関数を利用すると、XPATHを指定して、スプレッドシート上にデータを取得することができます。
たとえば、タイトルを取得したい場合は、
IMPORTXML("https://example.com", "//title")
で、タイトルを自動収集することができます。
まとめ
ということで、PythonでWebスクレイピングをする方法について解説しました。プログラミング初心者であれば、Progateで
- HTML
- CSS
- JavaScript
- Python
を勉強したうえで、スクレイピングを教えてくれるスクールに通って勉強してみるのがおすすめです。
・スクレイピングだけでなく、取得したデータの分析や活用まで本格的に学びたい
・せっかくだからPythonを学んだ経験を今後の転職活動に活かしたい
→スクール卒業後もデータ分析を学び放題&転職支援もあるキカガク
→3ヶ月〜のコースでPythonを基礎から実践まで学べるAidemy Premium Plan
・とりあえずスクレイピングで日々の業務効率化を達成したいが、独学でつまづいている
→Python/機械学習の基礎を習得したいならTechAcademy
→業務効率化に興味があるならCodeCamp