Zalando.co.uk(ファッションのみ)のスクレイピング方法
By JoeVu, at: 2024年1月17日22:08
Estimated Reading Time: __READING_TIME__ minutes


1. Playwright:強力なWeb自動化ツール
Playwrightとは?
Playwrightは、Microsoftによって2020年1月30日から開発されている包括的なWeb自動化ツールです。Chrome、Firefox、SafariなどのWebブラウザと連携するように設計されており、Webページとの対話とデータ抽出に対して柔軟で堅牢なアプローチを提供します。
なぜPlaywrightなのか?
Playwrightは、単なるブラウザ自動化ツールを超えています。Webインタラクション、マウスとキーボード操作、スクリーンショットのキャプチャ、さらには複数ページのアプリケーションの処理など、さまざまなタスクを実行する際の汎用性を提供します。この柔軟性により、Playwrightは効率的なWebスクレイピングに最適な選択肢となります。
別の解決策としてはSeleniumがありますが、Playwrightは以下のようにはるかに優れています。
-
ブラウザサポートの向上:Playwrightは、単一のAPIを使用して主要なブラウザ(Chromium、Firefox、WebKit)すべてをネイティブにサポートしており、ブラウザ固有の設定なしに一貫したクロスブラウザテストを可能にします。
-
最新のWeb機能の優れた処理:最新のWebアプリケーション向けに設計されたPlaywrightは、シングルページアプリケーション(SPA)、Webソケット、サービスワーカーなど、Seleniumでは困難な複雑なシナリオを簡単にサポートします。
-
高速な実行:そのアーキテクチャと最適化のおかげで、PlaywrightはSeleniumと比較してテスト実行速度が速く、特に大規模な自動テストスイートではテスト実行時間を短縮します。
-
組み込みの並列テスト実行:Playwrightには、テストを並列で実行するための組み込みサポートが含まれており、Seleniumのように並列テストに追加のツールを必要とすることなく、テストスイートの設定とスケーリングを簡素化します。
-
自動待機機能:アクションを実行する前に要素の準備が整うのを自動的に待機するため、明示的な待機を減らし、堅牢性を向上させ、テストの不安定性を最小限に抑えます。
-
ヘッドレステストの設定の簡素化:ヘッドレステストの設定が簡単であるため、自動テスト環境へのCI/CDパイプラインへの統合が容易になります。
-
最新のインタラクションのための豊富なAPIセット:包括的なAPIスイートにより、複数ページのシナリオ、ファイルのアップロードとダウンロードなど、複雑なユーザーインタラクションをシミュレートし、高度なユーザーインターフェースのテストに適応できます。
-
強化されたデバッグ機能:Playwrightは、スクリーンショットのキャプチャ、テストセッションビデオの記録、アクションのトレースを行うツールを提供し、自動テストの問題の診断と解決を支援します。
-
複数言語サポート:最初はNode.js向けでしたが、Playwrightは現在、Python、Java、C#もサポートしており、さまざまなテクノロジースタックを持つ幅広い開発チームが利用できます。
-
アクティブな開発とコミュニティサポート:新しいツールとして、Playwrightはアクティブな開発、頻繁なアップデート、そして豊富なリソースとサポートを提供する成長しているコミュニティの恩恵を受けています。
2. 目的とデータ出力
目標は、男性向けファッション製品をすべてスクレイピングすることです。 製品価格、タイトル、説明をスクレイピングしたいと考えています。結果は下記の形式です。
[
{
"listing_url": https://www.zalando.co.uk/pier-one-shirt-olive-pi922d0b0-n11.html,
"title": "Pier One Shirt - olive",
"description": " Pier One Shirt - olive for 327.99 (2023-08-02) Free shipping on most orders*"
},
{
"listing_url": https://www.zalando.co.uk/pier-one-shirt-black-pi922d0b0-q11.html,
"title": "Pier One Shirt - black",
"description": " Pier One Shirt - black for 327.99 (2023-08-02) Free shipping on most orders*",
}
]
#
JSON配列の各エントリは、リストURL、タイトル、説明などの詳細を含む製品を表します。
3. 解決策
3.1. ウェブサイトのレビュー
スクレイピングを始める前にウェブサイトをレビューする必要があるのはなぜですか? ウェブサイトをレビューしないと、どのような情報が提供されているか、製品がどのように表示されているか、ウェブサイト全体の構造がわかりません。スクレイピングするウェブサイトを明確に理解せずに、効果的なスクレイピング戦略を立てることは困難です。したがって、ウェブサイトをレビューすることは、最も効率的で最適なスクレイピング戦略を開発するために不可欠です。
男性向け製品専用のすべてのページを確認してください。ページを右クリックして「検証」を選択し、Web要素の詳細な構造を調べます。レビューが徹底的であればあるほど、ニーズに最適なスクレイピング戦略を策定しやすくなります。
3.2. プランニング
まず、男性向け製品のすべてのページを収集するには、2つのアプローチがあります。
- メインページにページの総数が表示されている場合は、その値をすぐに取得して、ウェブサイトのすべてのページを取得します。
- そうでない場合は、製品の総数を取得し、1ページあたりの製品数で割って、ページの総数を計算します。
その後、すべての製品ページのURLを収集したら、各リンク/URLにアクセスして製品の詳細をスクレイピングします。
このウェブサイトでは、まずすべての製品のURLリストを収集するプロセスが行われます。その後、残りの情報をすべて収集します。
3.3. Playwrightの使用
Playwrightのインストール:
pip install playwright
playwright install
Playwrightコードの記述:
- PythonコードにPlaywrightをインポートします。
- ブラウザコンテキストを初期化します。
- zalando.co.ukに移動します。
- セレクタを使用して要素を操作します。
- 必要なデータを抽出および保存します。
例:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://www.zalando.co.uk/mens-clothing/")
# データ抽出操作を実行
# ...
browser.close()
3.4. 男性向けファッションのすべてのページングのスクレイピング
ウェブサイトへのアクセスに関する最初のステップの後、次のタスクは、ページネーションをナビゲートしてすべての製品に関する情報を抽出することです。
# すべての製品ページングリンクを取得するためのコード例
total_page = calculate_total_pages() # ここで総ページ数を計算
results = []
for page in range(0, total_page):
link = f"https://www.zalando.co.uk/mens-clothing/?p={page + 1}"
results.append(link)
# リンクをファイルに書き込む
with open(result_path, "w") as fp:
for line in results:
fp.write(f"{line}\\n")
3.5. 各製品の製品詳細のスクレイピング
すべての製品への詳細なリンクを含むファイルが作成されたら、各リンクを1つずつ読み取り、必要な情報を抽出します。
# 製品詳細をスクレイピングするためのコード例
for link in read_links_from_file(result_path):
product_data = scrape_product_details(link)
# 必要に応じて製品データを処理
Playwrightを使用して、JavaScriptレンダリング機能を活用し、URL、タイトル、説明などの情報を抽出します。
# 製品情報取得のコード例
data = self.page.query_selector('script[type="application/ld+json"]')
if data:
data = json.loads(data.text_content())
else:
return
title = f'{data.get("manufacturer")} {data.get("name")}'
description = data.get("description")
listing_url = f'https://www.zalando.co.uk/{data.get("url")}'
price = data.get("offers", [])[0].get("price")
product = {
"listing_url": listing_url,
"title": title,
"description": description,
"price": price
}
return product
4. 最終的なソースコード
5. 潜在的な問題
-
ReCaptcha
ReCaptchaは、Playwrightのようなブラウザ自動化ツールにとって大きな課題です。これは、ユーザーの確認を必要とするウェブサイトでのログインプロセスまたはインタラクションの自動化を妨げる可能性があります。
解決策:システムのAPIまたはCaptcha解決ライブラリを使用して、ReCaptchaを効果的に処理します。あるいは、例外を発生させて異なるセッションをナビゲートすることができます。
-
IPアドレスのBAN
Playwrightを使用して同じIPアドレスから複数回リクエストを行うと、サーバーによってBANされるリスクがあります。
解決策:プロキシを使用してIPアドレスを動的に変更し、BANを回避します。
-
リクエスト制限
一部のウェブサイトでは、特にPlaywrightを自動化に使用する場合、特定の時間枠内で許可されるリクエスト数に制限が設けられています。
解決策:リクエスト数とそれらの間の待機時間を最適化します。ログインを必要とするウェブサイトでは、セッションを使用してログイン状態を維持することを検討してください。
-
異なるページレイアウト
ウェブサイトは構造とインターフェースを変更することがよくあり、自動化されたスクリプトの安定性を低下させる可能性があります。
解決策:ページ構造のさまざまなケースを処理することに注意を払い、柔軟なスクリプトを作成します。
-
クラッシュ/ハングアップ
Playwrightは特定のブラウザやウェブサイトで問題が発生し、クラッシュやアプリケーションの閉鎖につながる可能性があります。
解決策:Playwrightのエラー処理メカニズムを使用して、問題をログに記録し、通知します。Sentryなどのサービスまたはその他の監視ツールを使用して、発生している問題を追跡し、迅速に報告します。
これらの問題に積極的に対処し、適切な解決策を適用することで、ブラウザ自動化におけるPlaywrightの潜在能力を最大限に活用できます。
6. ヒント、コツ、ベストプラクティス
- 待機時間管理:WebページにJavaScriptをレンダリングするのに十分な時間を与えるために、スクリプトに適切な待機時間を統合します。これは、要素と対話する前に要素が完全に読み込まれていることを確認し、エラーの可能性を減らすために不可欠です。
- エラー処理:スクレイピングプロセスの安定性を維持するために、堅牢なエラー処理メカニズムを実装します。エラーを適切にログに記録し、信頼性を向上させるために指数関数的バックオフ戦略を使用して失敗したアクションを再試行することを検討します。
- ユーザーエージェント管理:さまざまなブラウザとデバイスをエミュレートするためにユーザーエージェントヘッダーを設定し、サーバーからの検出と潜在的なブロックを回避します。多様なユーザーの行動を模倣するために、ユーザーエージェントを定期的にローテーションします。
- ChatGPT Visionを使用してHTMLからデータ抽出:ChatGPT Visionを活用して、データ抽出機能を強化します。ChatGPT Visionを統合することで、HTMLから効率的に情報を抽出し、データスクレイピングプロセスをよりインテリジェントで適応性のあるものにすることができます。
- 動的要素の識別:Web要素を動的に識別するための堅牢な戦略を採用します。CSSクラスやデータ属性などの安定した識別子を使用すると、スクリプトはWebページ構造の変化に適応できます。
- プロキシローテーション:プロキシのローテーションを使用してIPアドレスを多様化し、IPアドレスのBANを防ぎ、Webスクレイピングアクティビティの匿名性を高めます。
- ロギングと監視:スクリプトアクティビティを追跡し、潜在的な問題を特定するために、包括的なロギングを実装します。Sentryなどの監視ツールまたはサービスを使用して、重大なエラーに関するリアルタイムの警告を受け取ります。
- サーバーへの過負荷の回避:サーバーへの過負荷を防ぐために、リクエストの速度に注意してください。これはIPアドレスのBANにつながる可能性があります。ターゲットウェブサイトのポリシーに沿ったレート制限戦略を実装します。
- 定期的なスクリプトメンテナンス:ターゲットウェブサイトの構造またはポリシーの変化に対応するために、定期的にスクリプトを確認および更新します。定期的なメンテナンスは、継続的な有効性を確保し、中断を最小限に抑えます。
- テスト環境:本番環境に展開する前に、制御された環境でスクリプトを開発およびテストします。これにより、潜在的な問題を早期に特定し、よりスムーズな自動化プロセスを確保できます。
これらのヒント、コツ、ベストプラクティスをPlaywrightスクリプトに組み込むことで、ブラウザインタラクションとデータ抽出の自動化における信頼性、適応性、全体的な効率を向上させることができます。
7. まとめ
zalando.co.ukからデータをスクレイピングするためにPlaywrightを使用すると、柔軟性とパワーが得られます。さまざまなタスクを自動化し、詳細な製品情報を効率的に収集できます。ベストプラクティスに従うことで、スクレイピングプロセス全体を通して安定性と安全性を確保できます。楽しいスクレイピングを!