PythonでWebスクレイピングをする方法|初心者向けにWebページの情報を取得

Pythonでは、Webサイトに掲載されている情報を自動で取得することができます。

このような仕組みをWebスクレイピングと呼びます。

例えば、

  • Webページのタイトルを取得する
  • Webページ内の文章を取得する
  • 複数ページの情報をまとめて取得する
  • 商品情報を一覧にする
  • ニュース記事のタイトルを取得する

といった処理をPythonで自動化できます。

この記事では、Python初心者向けに、Webスクレイピングの基本をやさしく解説します。


Webスクレイピングとは?

Webスクレイピングとは、Webページから必要な情報をプログラムで取得する技術です。

例えば、人間がWebサイトを開いて、

Webサイトを開く
↓
ページを見る
↓
必要な情報を探す
↓
コピーする
↓
Excelに貼り付ける

という作業をしているとします。

これをPythonにやってもらうイメージです。

Python
 ↓
Webページにアクセス
 ↓
HTMLを取得
 ↓
必要な情報を取り出す
 ↓
画面に表示・ファイルに保存

大量の情報を扱う場合には、特に便利です。


PythonでWebスクレイピングをするには?

PythonでWebスクレイピングをする方法はいくつかあります。

初心者が最初に覚えるなら、

requests + Beautiful Soup

という組み合わせがおすすめです。

requestsはWebページを取得するために使い、Beautiful Soupは取得したHTMLから必要な情報を取り出すために使います。

requests
    ↓
Webページを取得
    ↓
HTML
    ↓
Beautiful Soup
    ↓
必要な情報を取得

必要なライブラリをインストールする

requestsとBeautiful Soupは、Pythonの標準機能ではありません。

そのため、最初にインストールします。

コマンドプロンプトやターミナルを開いて、次のコマンドを実行してください。

pip install requests beautifulsoup4

環境によって pip が使えない場合は、

python -m pip install requests beautifulsoup4

でもインストールできます。

Windowsでは、

py -m pip install requests beautifulsoup4

という方法もあります。


ライブラリが使えるか確認する

インストールが終わったら、次のプログラムを実行してみましょう。

import requests
from bs4 import BeautifulSoup

print("Webスクレイピングの準備ができました!")

エラーが出なければ準備完了です。


Webページを取得してみる

まずはWebページのHTMLをPythonで取得してみましょう。

今回は例として、Webスクレイピング練習用サイトを使います。

import requests

url = "https://toscrape.com/"

response = requests.get(url)

print(response.text)

実行すると、大量の文字が表示されます。

これはWebページのHTMLです。

ブラウザでは普通のWebページとして表示されますが、その中身にはHTMLという情報が含まれています。


requestsとは?

requestsは、PythonからWebサイトなどにHTTPリクエストを送るためのライブラリです。

例えば、

response = requests.get(url)

とすると、指定したURLのWebページを取得できます。

イメージとしては、

Python
 ↓
「このWebページをください」
 ↓
Webサーバー
 ↓
HTMLを返す
 ↓
Python

という流れです。


HTMLとは?

Webページは、HTMLという言語を使って構成されています。

例えば、非常に簡単なHTMLなら、

<h1>Python入門</h1>
<p>Pythonについて学びましょう。</p>

のようになっています。

ブラウザはこのHTMLを解釈して、

Python入門

Pythonについて学びましょう。

というWebページとして表示します。

Webスクレイピングでは、このHTMLから必要な情報を取り出します。


Beautiful Soupを使ってHTMLを解析する

ここで登場するのがBeautiful Soupです。

import requests
from bs4 import BeautifulSoup

url = "https://toscrape.com/"

response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

print(soup.title)

実行すると、Webページの <title> 要素を取得できます。

例えば、

<title>Scraping Sandbox</title>

のような情報が表示されます。


BeautifulSoup()とは?

この部分です。

soup = BeautifulSoup(response.text, "html.parser")

取得したHTMLをBeautiful Soupで解析しています。

response.textにはWebページのHTMLが入っています。

Webページ
 ↓
requests
 ↓
response.text
 ↓
Beautiful Soup
 ↓
HTMLを解析

という流れです。


Webページのタイトルだけ取得する

Webページのタイトルだけを取得してみましょう。

import requests
from bs4 import BeautifulSoup

url = "https://toscrape.com/"

response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

print(soup.title.text)

textを付けることで、HTMLタグではなく中の文字だけを取得できます。

例えば、

<title>Scraping Sandbox</title>

から、

Scraping Sandbox

という文字列を取り出せます。


見出しを取得する

Webページには、

<h1>見出し</h1>
<h2>小見出し</h2>

のような見出しがあります。

Beautiful Soupを使えば、こうした情報も取得できます。

例えば、

import requests
from bs4 import BeautifulSoup

url = "https://toscrape.com/"

response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

heading = soup.find("h1")

print(heading.text)

find()を使うことで、指定したHTML要素を探すことができます。


find()とは?

例えば、

soup.find("h1")

とすると、HTMLの中から最初の <h1> 要素を探します。

同じように、

soup.find("p")

なら、最初の <p> 要素を探します。

soup.find("title")

なら、<title>要素を探します。

このように、HTMLのタグを指定して情報を探せます。


複数の要素を取得する

Webページに同じ種類のHTML要素が複数ある場合は、find_all()を使います。

例えば、すべてのリンクを取得してみます。

import requests
from bs4 import BeautifulSoup

url = "https://toscrape.com/"

response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

links = soup.find_all("a")

for link in links:
    print(link.text)

これで、ページ内にある <a>タグの文字を順番に表示できます。


このプログラムで取得できるのはあくまでも、ユーザーに見えているリンクの文字部分です。

リンク先のURL(アドレス)自体を取得したい場合は、次のプログラムを使います。


リンク先のURLを取得する

Webページのリンクには、リンク先のURLも含まれています。

例えば、

<a href="https://toscrape.com/">Scraping Sandbox</a>

というHTMLがあった場合、

Scraping Sandbox

がリンクの文字、

https://toscrape.com/

がリンク先です。

Pythonからリンク先を取得するには、

import requests
from bs4 import BeautifulSoup

url = "https://toscrape.com/"

response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

links = soup.find_all("a")

for link in links:
    print(link.get("href"))

とします。

get("href")によって、href属性の値を取得できます。


スクレイピングした情報をCSVに保存する

ここまで学んできたCSVと組み合わせると、さらに便利になります。

例えば、Webページから取得した情報をCSVファイルに保存できます。

import csv
import requests
from bs4 import BeautifulSoup

url = "https://toscrape.com/"

response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

links = soup.find_all("a")

with open("links.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)

    writer.writerow(["リンク文字", "URL"])

    for link in links:
        text = link.text.strip()
        href = link.get("href")

        writer.writerow([text, href])

print("CSVファイルを作成しました!")

これで、

Webサイト
 ↓
Pythonで取得
 ↓
Beautiful Soupで解析
 ↓
必要な情報を抽出
 ↓
CSVに保存

という処理ができます。

これは、前の記事で学んだCSV操作がそのまま活かされています。


PythonでCSVを操作する方法については、こちらの記事で解説しています。

参考記事
・PythonでCSVファイルを扱う方法|初心者向けに読み込み・書き込みをやさしく解説

Webスクレイピングには注意点がある

Webスクレイピングは便利ですが、どんなWebサイトでも自由に情報を取得してよいわけではありません。

スクレイピングする前に、

  • Webサイトの利用規約
  • robots.txt
  • 著作権
  • サーバーへの負荷
  • 個人情報

などを確認することが重要です。

特に、短時間に大量のアクセスを繰り返すようなプログラムは、Webサーバーに大きな負荷をかける可能性があります。

練習するときも、必要以上に何度もアクセスしないようにしましょう。


Webスクレイピングでできること

基本を理解すると、さまざまな処理に応用できます。

例えば、

商品情報の取得

商品名
価格
URL

などを取得して一覧にする。

ニュース情報の取得

記事タイトル
URL
公開日時

などを取得する。

Webページの情報収集

複数のページから必要な情報を集めて、CSVやExcelに保存する。

定期的な情報収集

Pythonのプログラムを定期的に実行して、Web上の情報を収集する。

このように、Webスクレイピングは情報収集の自動化と相性がいい技術です。


WebスクレイピングとPythonの自動化

これまでの記事では、

  • ファイル名の変更
  • 画像の一括処理
  • CSVの読み書き
  • Excelファイルの操作

について学びました。

ここにWebスクレイピングが加わると、Pythonでできる自動化の幅がさらに広がります。

例えば、

Webサイト
 ↓
情報を取得
 ↓
必要なデータだけ取り出す
 ↓
CSVに保存
 ↓
Excelで確認

という一連の処理をPythonで自動化できます。

つまり、これまで別々に学んできた機能を組み合わせて使えるようになります。


まとめ

今回はPythonを使ったWebスクレイピングの基本を紹介しました。

覚えておきたいポイントは次のとおりです。

  • WebスクレイピングはWebページから情報を取得する技術
  • requestsでWebページを取得できる
  • Beautiful SoupでHTMLを解析できる
  • find()で特定の要素を取得できる
  • find_all()で複数の要素を取得できる
  • get("href")でリンク先URLを取得できる
  • CSVと組み合わせると情報を保存できる
  • Webスクレイピングでは利用規約やサーバーへの負荷に注意する

Pythonは、単にプログラムを作るだけではなく、Web・ファイル・Excel・CSVなどをつないで作業を自動化できるのが大きな魅力です。

今回のWebスクレイピングも、これまで学んできたPythonの知識と組み合わせることで、より実用的なプログラムを作れるようになります。

関連記事
・WindowsにPythonをインストールする方法【初心者向け】
・PythonでCSVファイルを扱う方法|初心者向けに読み込み・書き込みをやさしく解説
タイトルとURLをコピーしました