第2章: Pythonと必要なライブラリのセットアップ

Webスクレイピングは、Webページから必要なデータを収集するための技術です。この章では、Webスクレイピングに必要なPythonライブラリのセットアップ方法と、それぞれのライブラリの基本的な使い方について詳しく解説します。主に、以下の4つのライブラリについて扱います。

  1. requests: Webページからデータを取得するためのライブラリ
  2. BeautifulSoup: HTMLやXMLドキュメントを解析し、必要な情報を抽出するためのライブラリ
  3. Selenium: 動的に生成されるコンテンツ(JavaScriptを使用したWebページ)を扱うためのライブラリ
  4. Scrapy: 高性能なスクレイピングフレームワークで、大規模なデータ収集に最適なライブラリ

各ライブラリを使う際のセットアップ手順、基本的な使い方、そして簡単なサンプルコードを含めて詳しく説明していきます。


2.1 Python環境のセットアップ

まず、これらのライブラリを使用するためにはPythonがインストールされている必要があります。以下にPythonのインストール手順を示します。

  1. Pythonのインストール Pythonは公式サイトからダウンロードしてインストールできます。Pythonの公式ページにアクセスして、OSに応じたバージョンをダウンロードします。

Python 3.x系を推奨します。Webスクレイピングや他のデータ解析ツールとの互換性が良く、将来的にもサポートが充実しています。

  1. 仮想環境の作成 複数のプロジェクトで異なるバージョンのライブラリを管理するためには、仮想環境を使うことが推奨されます。仮想環境を使うと、特定のプロジェクトで必要なライブラリをプロジェクトごとに分離して管理できます。

仮想環境を作成するには、以下のコマンドを使用します。

python3 -m venv myenv

myenv は仮想環境の名前です。仮想環境を作成した後は、以下のコマンドで有効化できます。

  1. macOS/Linux:

source myenv/bin/activate

  1. Windows:

myenv\Scripts\activate

  1. pipのアップデート Pythonのパッケージ管理ツールであるpipを使ってライブラリをインストールします。最初に、pipを最新版に更新します。

pip install –upgrade pip

これでPython環境が整いました。次に、必要なライブラリのインストールと使用方法を詳しく見ていきます。


2.2 requestsのセットアップと使い方

requestsは、HTTPリクエストを送信し、Webページのデータを取得するために最も基本的で広く使用されているライブラリです。このライブラリを使用することで、Webサーバーに対してGETリクエストやPOSTリクエストを簡単に送信し、HTMLデータを取得できます。

  1. requestsのインストール requestsライブラリは、pipを使って簡単にインストールできます。以下のコマンドを仮想環境内で実行してインストールします。

pip install requests

  1. requestsの基本的な使い方

requestsライブラリを使ってWebページからデータを取得するには、最も一般的なHTTPメソッドであるGETリクエストを使用します。以下は基本的な使用例です。

import requests
url = ‘https://example.com’
response = requests.get(url)
# ステータスコードの確認
print(response.status_code)
# HTMLコンテンツの表示
print(response.text)

上記のコードでは、指定されたURLに対してGETリクエストを送り、そのレスポンス(HTMLコンテンツ)を表示しています。status_codeを確認することで、リクエストが成功したかどうか(200なら成功)も確認できます。

  1. パラメータ付きリクエスト

Webサイトによっては、URLにパラメータを追加することで特定の検索結果を得ることができます。requestsでは、パラメータを辞書型で指定することでこれを実現できます。

import requests
url = ‘https://example.com/search’
params = {‘q’: ‘Python’, ‘page’: 2}
response = requests.get(url, params=params)
# URLを確認
print(response.url)

この例では、https://example.com/searchにq=Pythonとpage=2というクエリパラメータを付けてリクエストを送信し、検索結果のページを取得しています。

  1. エラーハンドリング

requestsを使う際には、サーバーエラーやネットワークエラーなど、さまざまなエラーが発生する可能性があります。これらのエラーに対処するためには、適切なエラーハンドリングが重要です。

import requests
url = ‘https://example.com’
try:
    response = requests.get(url)
    response.raise_for_status()  # エラーがあれば例外を発生
except requests.exceptions.HTTPError as err:
    print(f’HTTPエラー: {err}’)
except requests.exceptions.ConnectionError:
    print(‘接続エラー’)
except requests.exceptions.Timeout:
    print(‘タイムアウトエラー’)
except requests.exceptions.RequestException as e:
    print(f’何らかのエラーが発生しました: {e}’)

ここでは、raise_for_statusメソッドを使用してHTTPエラーが発生した場合に例外をスローし、適切なエラーメッセージを表示しています。


2.3 BeautifulSoupのセットアップと使い方

BeautifulSoupは、取得したHTMLデータを解析し、特定のデータ(タイトル、リンク、テキストなど)を抽出するためのライブラリです。主にlxmlやhtml.parserなどのパーサーを使用してHTMLやXMLを解析します。

  1. BeautifulSoupのインストール BeautifulSoupは、beautifulsoup4パッケージとして提供されており、pipでインストールできます。また、lxmlパーサーもインストールしておくと便利です。

pip install beautifulsoup4 lxml

  1. BeautifulSoupの基本的な使い方

BeautifulSoupを使ってHTMLを解析し、特定の要素を抽出するには、まずHTMLコンテンツを取得し、それをBeautifulSoupオブジェクトに渡します。

from bs4 import BeautifulSoup
import requests
url = ‘https://example.com’
response = requests.get(url)
soup = BeautifulSoup(response.text, ‘lxml’)
# ページタイトルの取得
print(soup.title.text)
# 全てのリンクを取得
for link in soup.find_all(‘a’):
    print(link.get(‘href’))

このコードでは、まずWebページのHTMLを取得し、BeautifulSoupオブジェクトに渡しています。その後、soup.title.textでページのタイトルを取得し、soup.find_all(‘a’)で全てのリンクを取得しています。

  1. 特定の要素を検索する

findやfind_allメソッドを使って、特定のHTML要素を簡単に検索できます。例えば、特定のクラスやIDを持つ要素を取得したい場合、以下のようにします。

# 特定のクラスを持つ要素を取得
element = soup.find(‘div’, class_=’my-class’)
print(element.text)
   # 特定のIDを持つ要素を取得
   element = soup.find(‘div’, id=’my-id’)
   print(element.text)

findメソッドは、最初に見つけた要素を返し、find_allメソッドは条件に一致するすべての要素をリストとして返します。また、CSSセレクタを使って要素を検索することも可能です。

   # CSSセレクタを使って要素を取得
   elements = soup.select(‘div.my-class > p’)
   for element in elements:
       print(element.text)

この例では、divタグの中にあるpタグをCSSセレクタで検索し、それぞれのテキストを表示しています。CSSセレクタを使用することで、より柔軟にHTML要素を検索することが可能です。

  1. HTMLデータのクリーニング

Webページから取得したデータは、時に不要な改行や空白、スクリプトタグなどが含まれることがあります。BeautifulSoupを使って、これらの不要なデータをクリーニングする方法も紹介します。

   # すべてのスクリプトやスタイルタグを削除
   for script in soup([‘script’, ‘style’]):
       script.decompose()
   # ページのテキストのみを取得
   text = soup.get_text()
   # 不要な改行や空白を削除
   lines = (line.strip() for line in text.splitlines())
   cleaned_text = ‘\n’.join(line for line in lines if line)
   print(cleaned_text)

このコードでは、まずスクリプトやスタイルタグを削除し、次にページ全体のテキストを取得しています。その後、不要な改行や空白を削除して、読みやすい形に整えています。


2.4 Seleniumのセットアップと使い方

Seleniumは、ブラウザを自動的に操作するためのライブラリで、特にJavaScriptで生成された動的コンテンツをスクレイピングする際に使用されます。例えば、requestsやBeautifulSoupでは、JavaScriptで動的に生成されるデータを取得できない場合がありますが、Seleniumを使えば、実際にブラウザを操作しながらスクレイピングすることが可能です。

  1. Seleniumのインストール

まず、Seleniumライブラリをpipでインストールします。

   pip install selenium

次に、SeleniumはWebブラウザを自動的に操作するため、対応するブラウザのドライバをインストールする必要があります。例えば、Google Chromeを使用する場合、ChromeDriverをダウンロードしてパスを通す必要があります。

  • ChromeDriverのダウンロード: https://sites.google.com/chromium.org/driver/

ChromeDriverをダウンロードしたら、Seleniumで指定することができます。

  1. Seleniumの基本的な使い方

以下に、Seleniumを使ってGoogle Chromeブラウザを操作し、ページのスクリーンショットを撮る例を示します。

   from selenium import webdriver
   # Chromeのドライバーを指定
   driver = webdriver.Chrome(executable_path=’/path/to/chromedriver’)
   # 指定したURLにアクセス
   driver.get(‘https://example.com’)
   # スクリーンショットを保存
   driver.save_screenshot(‘screenshot.png’)
   # ブラウザを閉じる
   driver.quit()

このコードでは、まずChromeDriverを指定し、Seleniumを使って指定したURLにアクセスしています。その後、ページ全体のスクリーンショットを撮り、ブラウザを閉じています。

  1. 要素の検索と操作

Seleniumを使って、Webページ上の要素を検索し、クリックやテキストの入力などの操作を行うことができます。例えば、Googleで検索を行うには以下のようにします。

   from selenium import webdriver
   from selenium.webdriver.common.keys import Keys
   # Chromeのドライバーを指定
   driver = webdriver.Chrome(executable_path=’/path/to/chromedriver’)
   # Googleにアクセス
   driver.get(‘https://www.google.com’)
   # 検索ボックスを見つけて検索ワードを入力
   search_box = driver.find_element(‘name’, ‘q’)
   search_box.send_keys(‘Python’)
   search_box.send_keys(Keys.RETURN)
   # 結果が表示されるのを待つ
   driver.implicitly_wait(10)
   # 結果のタイトルを取得
   titles = driver.find_elements(‘tag name’, ‘h3’)
   for title in titles:
       print(title.text)
   # ブラウザを閉じる
   driver.quit()

ここでは、Seleniumを使ってGoogleの検索ボックスに「Python」というキーワードを入力し、検索を実行しています。find_elementメソッドを使って要素を検索し、send_keysメソッドで文字列を入力したり、Keys.RETURNでエンターキーを送信したりしています。

  1. JavaScriptの実行

Seleniumを使って、Webページ上でJavaScriptを実行することも可能です。以下の例では、ページのスクロールを行うJavaScriptを実行しています。

   # ページを一番下までスクロール
   driver.execute_script(‘window.scrollTo(0, document.body.scrollHeight);’)

execute_scriptメソッドを使うことで、任意のJavaScriptコードをWebページ上で実行できます。これにより、JavaScriptで動的に生成されるデータを取得したり、ページのスクロール操作を行ったりすることが可能です。


2.5 Scrapyのセットアップと使い方

Scrapyは、Pythonで大規模なWebスクレイピングを行うための強力なフレームワークです。requestsやBeautifulSoupよりも高度な機能を持ち、効率的に多くのページをクロールし、データを取得することができます。

  1. Scrapyのインストール

Scrapyはpipを使って簡単にインストールできます。

   pip install scrapy

  1. Scrapyの基本的な使い方

Scrapyは、プロジェクトベースで作業を行います。まず、Scrapyプロジェクトを作成し、その中にスパイダー(データを収集するクローラ)を定義します。以下に、簡単なスパイダーを作成する手順を示します。

   # Scrapyプロジェクトの作成
   scrapy startproject myproject
   # スパイダーの作成
   cd myproject
   scrapy genspider example example.com

このコマンドで、myprojectという名前のプロジェクトが作成され、example.com用のスパイダーが生成されます。次に、myproject/spiders/example.pyを編集してスパイダーを定義します。

   import scrapy
   class ExampleSpider(scrapy.Spider):
       name = ‘example’
       allowed_domains = [‘example.com’]
       start_urls = [‘https://example.com’]
       def parse(self, response):
           # ページのタイトルを取得
           title = response.xpath(‘//title/text()’).get()
           yield {‘title’: title}

このスパイダーは、example.comにアクセスし、ページのタイトルを取得して出力します。XPathを使ってページの要素を抽出し、yieldを使ってデータを返します。

  1. スパイダーの実行

スパイダーを実行するには、以下のコマンドを使用します。

   scrapy crawl example

これでスパイダーが実行され、指定したURLにアクセスしてデータを取得します。スクレイピングしたデータをJSONやCSVファイルに保存することも簡単に行えます。

   scrapy crawl example -o output.json

このコマンドでは、取得したデータをoutput.jsonというファイルに保存しています。Scrapyは大規模なデータ収集やページネーション(次のページへ移動)を自動的に処理できるため、効率的にデータを収集するのに非常に便利です。


まとめ

この章では、Pythonを使ってWebスクレイピングを行うために必要なライブラリrequests、BeautifulSoup、Selenium、Scrapyのセットアップと基本的な使い方について解説しました。それぞれのライブラリは異なる特徴を持ち、用途に応じて使い分けることが重要です。

  • requests: 簡単なHTTPリクエストとWebページからのデータ取得に最適
  • BeautifulSoup: HTMLやXMLを解析し、特定の要素を抽出するためのツール
  • Selenium: 動的に生成されるコンテンツのスクレイピングやブラウザ操作に適している
  • Scrapy: 大規模なスクレイピングプロジェクトに最適なフレームワーク

これらのツールを組み合わせることで、さまざまなWebページから効率的にデータを収集し、解析することができます。次の章では、スクレイピングで取得したデータの整理や保存方法について詳しく解説していきます。


初心者におすすめ!プログラミングスクールのススメ

未経験でも気軽に!サブスク型プログラミングスクール【Freeks】

プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。

独学の挫折率、驚きの87.5%!

独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。

有料と無料、スクールの違いは?

プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:

  • 受講条件が異なる
  • 学べるスキルやカリキュラム内容が異なる
  • 就職や転職のサポート内容が異なる

どちらが自分に合っているか、よく考えて選ぶのが大事です。

サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!

プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:

  • 未経験者向けのわかりやすいカリキュラム
  • 経験豊富なエンジニアのサポート
  • オンラインで自分のペースで学習可能

なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。

終了後は副業もサポート!

カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。

独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
 ↓ ↓ こちらをクリック ↓ ↓ 

p-school

Share
Published by
p-school

Recent Posts

第6章: PHPのデータベース操作

PHPを使用してデータベースに…

2週間 ago

第5章: PHPのオブジェクト指向プログラミング(OOP)

オブジェクト指向プログラミング…

2週間 ago

第4章: PHPの関数

プログラミングにおいて、関数は…

2週間 ago

第3章: PHPの配列とコレクション

PHPでの配列とコレクションの…

2週間 ago

第2章: PHPの基本文法

PHPの基本的な構文や使い方を…

2週間 ago