Webスクレイピングは、Webページから必要なデータを収集するための技術です。この章では、Webスクレイピングに必要なPythonライブラリのセットアップ方法と、それぞれのライブラリの基本的な使い方について詳しく解説します。主に、以下の4つのライブラリについて扱います。
各ライブラリを使う際のセットアップ手順、基本的な使い方、そして簡単なサンプルコードを含めて詳しく説明していきます。
2.1 Python環境のセットアップ
まず、これらのライブラリを使用するためにはPythonがインストールされている必要があります。以下にPythonのインストール手順を示します。
Python 3.x系を推奨します。Webスクレイピングや他のデータ解析ツールとの互換性が良く、将来的にもサポートが充実しています。
仮想環境を作成するには、以下のコマンドを使用します。
python3 -m venv myenv
myenv は仮想環境の名前です。仮想環境を作成した後は、以下のコマンドで有効化できます。
source myenv/bin/activate
myenv\Scripts\activate
pip install –upgrade pip
これでPython環境が整いました。次に、必要なライブラリのインストールと使用方法を詳しく見ていきます。
2.2 requestsのセットアップと使い方
requestsは、HTTPリクエストを送信し、Webページのデータを取得するために最も基本的で広く使用されているライブラリです。このライブラリを使用することで、Webサーバーに対してGETリクエストやPOSTリクエストを簡単に送信し、HTMLデータを取得できます。
pip install 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なら成功)も確認できます。
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というクエリパラメータを付けてリクエストを送信し、検索結果のページを取得しています。
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を解析します。
pip install beautifulsoup4 lxml
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’)で全てのリンクを取得しています。
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要素を検索することが可能です。
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を使えば、実際にブラウザを操作しながらスクレイピングすることが可能です。
まず、Seleniumライブラリをpipでインストールします。
pip install selenium
次に、SeleniumはWebブラウザを自動的に操作するため、対応するブラウザのドライバをインストールする必要があります。例えば、Google Chromeを使用する場合、ChromeDriverをダウンロードしてパスを通す必要があります。
ChromeDriverをダウンロードしたら、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にアクセスしています。その後、ページ全体のスクリーンショットを撮り、ブラウザを閉じています。
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でエンターキーを送信したりしています。
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よりも高度な機能を持ち、効率的に多くのページをクロールし、データを取得することができます。
Scrapyはpipを使って簡単にインストールできます。
pip install 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を使ってデータを返します。
スパイダーを実行するには、以下のコマンドを使用します。
scrapy crawl example
これでスパイダーが実行され、指定したURLにアクセスしてデータを取得します。スクレイピングしたデータをJSONやCSVファイルに保存することも簡単に行えます。
scrapy crawl example -o output.json
このコマンドでは、取得したデータをoutput.jsonというファイルに保存しています。Scrapyは大規模なデータ収集やページネーション(次のページへ移動)を自動的に処理できるため、効率的にデータを収集するのに非常に便利です。
まとめ
この章では、Pythonを使ってWebスクレイピングを行うために必要なライブラリrequests、BeautifulSoup、Selenium、Scrapyのセットアップと基本的な使い方について解説しました。それぞれのライブラリは異なる特徴を持ち、用途に応じて使い分けることが重要です。
これらのツールを組み合わせることで、さまざまなWebページから効率的にデータを収集し、解析することができます。次の章では、スクレイピングで取得したデータの整理や保存方法について詳しく解説していきます。
プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。
独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。
プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:
どちらが自分に合っているか、よく考えて選ぶのが大事です。
プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:
なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。
カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓