毎日手作業でコピペしていたデータ収集が、コードを数行書くだけで自動化できたら——そんな未来がPythonのWebスクレイピングで実現できます。価格比較、ニュース収集、リサーチ業務など、あらゆる場面で活躍する強力なスキルを、今日から身につけましょう。
Webスクレイピングとは、プログラムを使ってWebサイトから情報を自動で抽出することです。たとえば、あるテーマパークのサイトに今月のイベント一覧が掲載されていて、「何日に何のイベントがあるか」を自動で取得したい——そんなときにWebスクレイピングを使います。
データ取得の方法として「Web API」という選択肢もあります。Web APIが公開されているサービスではAPIを優先的に使いましょう。ただし、すべてのサイトでAPIが使えるわけではないため、APIがない場合にWebスクレイピングが活躍します。また、スクレイピングを禁止しているサイトもあるので、利用規約を事前に必ず確認してください。
PythonでWebスクレイピングをするには、以下の2つのライブラリを使います。
ターミナル(コマンドプロンプト)で以下のコマンドを実行してインストールします。
pip install requests
pip install beautifulsoup4 スクレイピングでは、HTMLの構造を理解する必要があります。HTMLはタグと呼ばれる「<div>〜</div>」のような囲みで構成されており、タグにclassやidという属性が付いていることがあります。欲しいデータがどのタグに包まれているかを特定することが、スクレイピングの第一歩です。
Chromeの「右クリック → 検証(デベロッパーツール)」を使うと、任意の要素のHTMLをすぐに確認できます。
import requests
from bs4 import BeautifulSoup
url = "https://example.com"
response = requests.get(url)
html = response.text requests.get(url) でページのHTMLを取得し、response.text でテキストとして受け取ります。
soup = BeautifulSoup(html, "html.parser") 取得したHTMLをBeautiful Soupに渡してオブジェクトを作成します。第2引数の "html.parser" はPython標準のHTMLパーサーです。
# タグ名で取得
tag = soup.find("h1")
# class名で取得
tag = soup.find("div", class_="main-content")
# id名で取得
tag = soup.find("span", id="username")
# すべての li タグを取得
items = soup.find_all("li") # テキストを取得
text = tag.get_text()
# href属性(URLなど)を取得
link = tag.get("href") リンク(<a>タグの href 属性)はドメインが省略された相対パスで記載されていることがあります。その場合はベースURLを先頭に付け加えることで完全なURLになります。
links = [a.get("href") for a in soup.find_all("a")] このように書くと、ページ内のすべてのリンクをまとめてリストとして取得できます。さらに取得したURLに再度 requests.get() を適用すれば、リンク先ページのデータも連続して取得することが可能です。
スクレイピングをより深く学ぶためには、書籍や環境構築グッズも大切です。実際に手を動かしながら学べる環境を整えることで、習得スピードが大幅にアップします🚀
requests はWebページのHTMLを「取得」するライブラリです。一方 Beautiful Soup は取得したHTMLを「解析・操作」するライブラリです。2つをセットで使うのが基本スタイルです。
サイトによってはスクレイピングを利用規約で禁止している場合があります。スクレイピングを実施する前に、対象サイトの利用規約や robots.txt を必ず確認しましょう。公開情報であっても、サーバーに過度な負荷をかける行為は問題になる場合があります。
取得したい要素が1件だけなら find()、同じ種類の要素を複数まとめて取得したい場合は find_all() を使います。find_all() はリストを返すので、for文やリスト内包表記と組み合わせて使うのが便利です。
相対パスで記載されている場合があります。その場合は対象サイトのベースURL(例:https://example.com)を先頭に結合することで完全なURLになります。Pythonの文字列結合や urljoin 関数が便利です。
requests と Beautiful Soup だけでは、JavaScriptで動的生成されるコンテンツの取得が難しい場合があります。そのような場合は Selenium や Playwright といったブラウザ自動操作ライブラリを組み合わせる方法があります。
PythonのBeautiful Soupを使えば、Webスクレイピングはとてもシンプルに実現できます。requestsでHTMLを取得し、Beautiful SoupでそのHTMLを解析して必要なデータを抽出する——この2ステップが基本です。HTMLのタグ構造を理解し、find() や find_all() を使いこなすことで、日々の情報収集や調査業務を大幅に効率化できます。ぜひ実際にコードを書いて、自動化の快適さを体験してみてください🐍✨