初回版サイトのスクレイピング方法 ― サンプルコード解説
By hientd, at: 2024年11月8日14:10
Estimated Reading Time: __READING_TIME__ minutes


スクレイピング方法https://thefirstedition.com – サンプルコード解説
ウェブサイトからデータをスクレイピングすることは、調査のためのデータ収集、リストの集約の作成、またはウェブベースの製品の構築など、多くの場合に役立つスキルです。このガイドでは、希少本の豊富なカタログを備えたサイトであるThe First Editionに掲載されている書籍をスクレイピングする方法を示します。SKU、タイトル、著者、価格、版、説明、場所、発行日、ISBNなどの情報を収集するための問題解決アプローチについて説明します。
1. サンプル問題
私たちの目標は、The First Editionから書籍情報を収集することです。各書籍のSKU、タイトル、著者、価格、版、説明、場所、発行日、ISBNなどの重要な詳細情報を抽出することを目指します。アプリで書籍データを表示したり、分析のためにこのデータが必要になるシナリオを考えてみましょう。
書籍のサンプル出力は次のようになります。
{
"sku": "12345",
"title": "To Kill a Mockingbird",
"author": "Harper Lee",
"price": "$1,250.00",
"edition": "First Edition",
"description": "A rare first edition of Harper Lee's 'To Kill a Mockingbird' with original dust jacket.",
"location": "New York, USA",
"date_published": "1960",
"isbn": "978-0-06-112008-4"
}
2. 問題の分析と解決策のステップの構築
ウェブスクレイピングタスクに取り組む際には、問題を分解することが重要です。以下は、私たちが従う手順です。
- データの特定:必要なデータを含む正確な要素を見つけるために、Webページの構造を確認します。
- ページネーションの理解:ほとんどのeコマースページには複数のページのリストがあります。これらのページをどのようにナビゲートするかを理解する必要があります。
- スクレイパーの構造化:単一の書籍ページからデータを取り出す関数を作成し、それを拡張して複数の書籍とページ全体のデータをスクレイピングします。
- データのコンパイル:さらなる分析のために、スクレイピングされたデータを構造化された形式(例:CSV)に保存します。
3. ソリューションの実装
ステップ1:必要なライブラリのインポートとヘッダーの設定
人間のブラウザの訪問を模倣するために、リクエストにHTTPヘッダーを使用します。
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
# ウェブサイトのベースURL
base_url = "https://thefirstedition.com"
# ブラウザ訪問を模倣するためのヘッダー
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
ステップ2:ページネーションを処理する関数の定義
スクレイパーがいつ停止するかを知るために、各カテゴリのページの総数を見つける必要があります。
def get_total_pages(category_url):
response = requests.get(category_url, headers=headers)
soup = BeautifulSoup(response.content, "html.parser")
# ページネーション要素を見つけ、ページの総数を取り出します
pagination = soup.find("nav", class_="woocommerce-pagination")
if pagination:
pages = pagination.find_all("a")
if pages:
last_page = pages[-2].get_text()
return int(last_page)
return
ステップ3:書籍の詳細の抽出
各書籍ページには、SKU、タイトル、著者、価格、説明などの詳細を保持する特定の要素が含まれています。これらの要素を取得する方法は次のとおりです。
def extract_book_details(book_url):
response = requests.get(book_url, headers=headers)
soup = BeautifulSoup(response.content, "html.parser")
details = {}
# SKUの抽出
sku = soup.find("span", class_="sku")
details["SKU"] = sku.get_text(strip=True) if sku else None
# タイトルの抽出
title = soup.find("h1", class_="product_title")
details["Title"] = title.get_text(strip=True) if title else None
# 価格の抽出
price = soup.find("p", class_="price")
details["Price"] = price.get_text(strip=True) if price else None
# 説明の抽出
description = soup.find("div", class_="woocommerce-product-details__short-description")
details["Description"] = description.get_text(strip=True) if description else None
return details
ステップ4:カテゴリ内の複数のページをスクレイピングする
カテゴリ内のページをループ処理してデータを集めるには、ページネーション関数を使用します。
def scrape_category(category_url):
books = []
total_pages = get_total_pages(category_url)
for page in range(1, total_pages + 1):
print(f"Scraping page {page} of {total_pages} in category {category_url}")
page_url = f"{category_url}/page/{page}/"
response = requests.get(page_url, headers=headers)
soup = BeautifulSoup(response.content, "html.parser")
# ページ上のすべての書籍リンクを見つけます
book_links = soup.find_all("a", class_="woocommerce-LoopProduct-link")
for link in book_links:
book_url = link.get("href")
print(f"Scraping book: {book_url}")
book_details = extract_book_details(book_url)
books.append(book_details)
time.sleep(1) # サーバーへの負担を避けるための遅延
return books
4. すべてをまとめ、カテゴリリンクのデモを行う
これで、スクレイパーを1つのカテゴリに適用し、出力をCSVファイルに保存できます。
# スクラップするカテゴリを選択します
category_url = "https://thefirstedition.com/product-category/literature-classics/"
# 選択したカテゴリをスクレイピングします
books_data = scrape_category(category_url)
# 書籍のリストをDataFrameに変換します
df = pd.DataFrame(books_data)
# CSVに保存します
df.to_csv("the_first_edition_books.csv", index=False)
print("Scraping completed. Data saved to 'the_first_edition_books.csv'")
上記のコードを実行すると、選択したカテゴリの各書籍の指定された詳細が収集され、the_first_edition_books.csv
に保存されます。
完全なコードスニペットはこちらに保存されています
5. 教訓
- 丁寧なスクレイピング:スクレイピングを行う際には、丁寧であることが重要です。サーバーへの過剰な負担を避けるために、リクエスト間には常に遅延を追加してください。サイトの
robots.txt
ガイドラインに従ってください。
- エラー処理:すべてのページが同じ構造になっているわけではありません。スクレイパーを構築する際には、欠落しているフィールドや予期しないレイアウトを処理するためのチェックを追加してください。
- ページネーションロジック:複数ページのコンテンツをナビゲートすることは、包括的なデータ収集に不可欠です。すべてのアイテムが確実に取得されるように、ページネーションロジックを慎重にテストしてください。
- データ構造:スクレイピングされたデータを意味のある方法で整理します。CSVやデータベースなどの構造化された形式を使用すると、後でデータの分析や使用が容易になります。
このガイドでは、ウェブスクレイピングの問題を効率的に分解および解決する方法を示しており、構造化されたデータとウェブスクレイパーの構築に関する洞察の両方を提供します。楽しいスクレイピングを!
今後のステップ:カテゴリリンクから書籍リンクのリストと、書籍リンクから書籍の詳細をスクレイピングする方法のみを説明しています。「サイトからカテゴリリンクのリストを取得する方法」は説明していません-試してみてください