PlaywrightでAmazonをスクレイピング (Node.js対応)

[![Group371.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/fedb274d-885b-0185-de40-c3e74d2a4d30.png)](https://leapcell.io/?lc_t=q_playcrawler)


# Playwrightを用いたWeb自動化とデータ収集（Node.jsバージョン）

Playwrightは、Chromium、Firefox、WebKitなどのブラウザをサポートする、Webページのテストと自動化のためのライブラリです。Microsoftによって開発され、効率的、信頼性が高く、高速で、クロスブラウザのWeb自動化タスクを可能にします。

## Playwrightを用いたAmazon製品情報の収集

Playwrightを使用して、ユーザーの行動をシミュレートし、例えばAmazon（[www.amazon.com](https://www.amazon.com)）にアクセスして製品情報とレビューをクローリングすることができます。CSSセレクタやXPathを使用することで、Webページの要素を正確に特定し、そのテキストや属性を抽出することができます。

### 例: Amazonのベストセラー一覧のクローリング

Playwrightを使用して、Amazonの国際ベストセラー一覧を収集します。手順は以下の通りです：
1. 対象ページにアクセスする。例えば：[https://www.amazon.com/b/?ie=UTF8&node=16857165011&ref_=sv_b_3](https://www.amazon.com/b/?ie=UTF8&node=16857165011&ref_=sv_b_3)
2. すべての書籍要素を選択する（クラス名が `a-section` と `a-spacing-base` のもの）
3. 書籍要素を反復処理し、タイトル、価格、評価、レビュー数などの情報を抽出する


#### LeapcellにPlaywrightの例をデプロイする

[LeapcellにおけるPlaywrightデプロイの例](https://docs.leapcell.io/examples/testing/playwright/)

このガイドは、LeapcellにPlaywrightテストをデプロイするための簡略化されたアプローチを提供しています。ステップバイステップのチュートリアルについては、上記のリンクを参照してください。


### Node.jsによる実装コード

以下は、Node.jsとPlaywrightを使用したデータ収集の実装です：

```javascript
const { chromium } = require('playwright');

(async () => {
    // ブラウザを起動する
    const browser = await chromium.launch({ headless: true });
    const context = await browser.newContext();
    const page = await context.newPage();
    
    // Amazonの検索ページにアクセスする
    await page.goto('https://www.amazon.com/');
    
    // キーワード「laptop」を検索する
    await page.fill('#twotabsearchtextbox', 'laptop');
    await page.click('#nav-search-submit-button');
    
    // ページの読み込みが完了するのを待つ
    await page.waitForLoadState('networkidle');
    
    // 製品リンクの一覧を取得する
    const links = await page.evaluate(() => {
        return Array.from(document.querySelectorAll('.s-result-item h2 a'))
           .map(a => a.href);
    });
    
    // 製品詳細データを収集する
    const results = [];
    for (const link of links) {
        const productPage = await context.newPage();
        await productPage.goto(link, { waitUntil: 'networkidle' });
        
        const title = await productPage.textContent('#productTitle');
        const rating = await productPage.textContent('#averageCustomerReviews.a-icon-alt').catch(() => 'N/A');
        const reviewCount = await productPage.textContent('#acrCustomerReviewText').catch(() => 'N/A');
        
        results.push({ title: title.trim(), rating, reviewCount });
        
        await productPage.close();
    }
    
    // 収集したデータを出力する
    console.log(results);
    
    // ブラウザを閉じる
    await browser.close();
})();
```

### コード分析

- **Playwrightの初期化**：`chromium.launch({ headless: true })` を使用してブラウザを起動します。
- **Amazon検索ページへの移動**：`page.goto()` を使用してウェブサイトにアクセスし、検索ボックスに入力し、検索を送信します。
- **製品リンクの抽出**：`document.querySelectorAll()` を使用してすべての製品のURLを取得します。
- **製品詳細の収集**：
  - 各製品のページを開きます。
  - 製品タイトル（`#productTitle`）を取得します。
  - 評価（`#averageCustomerReviews.a-icon-alt`）を取得します。
  - レビュー数（`#acrCustomerReviewText`）を取得します。
- **データの出力とブラウザの閉じる**

### コードの最適化

1. **エラーハンドリング**：一部の製品には評価やレビュー数がない場合があります。`.catch(() => 'N/A')` を使用して、コードがクラッシュしないようにします。
2. **自動化の効率化**：`await context.newPage()` を使用してコンテキストを再利用し、ページの読み込み速度を向上させます。
3. **ブロックされることの回避**：
   - プロキシアクセス（例えばPlaywrightの `proxy` オプション）を使用することができます。
   - `userAgent` を調整して、より本物のユーザーに似せることができます。

---

PlaywrightとNode.jsを使用することで、eコマースデータ分析や競合他社調査などのシナリオに適した、AmazonのWebページデータ収集を効率的に自動化することができます。

# [Leapcell: Webホスティング、非同期タスク、Redisの次世代サーバレスプラットフォーム](https://leapcell.io/?lc_t=q_playcrawler)

[![barndpic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/30673c55-0f52-a72d-a3ae-c11b7cae92c5.png)](https://leapcell.io/?lc_t=q_playcrawler)


最後に、Playwrightをデプロイするための最高のプラットフォームとして[Leapcell](https://leapcell.io/)をおすすめします。

### 1. 多言語対応
- JavaScript、Python、Go、またはRustで開発できます。  

### 2. 無制限のプロジェクトを無料でデプロイ
- 使用量に応じて課金 — リクエストがなければ料金はかかりません。

### 3. 抜群のコスト効率
- 使った分だけ支払い、アイドル時の料金はかかりません。  
- 例: 平均応答時間60msで694万回のリクエストをサポートするには25ドル。  

### 4. 簡素化された開発者体験
- 直感的なUIで簡単にセットアップできます。  
- 完全自動化されたCI/CDパイプラインとGitOpsの統合。  
- アクション可能な洞察のためのリアルタイムメトリクスとロギング。  

### 5. 簡単なスケーラビリティと高性能
- 高い並行処理を簡単に処理するための自動スケーリング。  
- オペレーションオーバーヘッドはゼロ — 構築に集中できます。  

[![Frame3-withpadding2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/78297b76-adf6-28d9-f750-1cbf9d532ac3.png)](https://leapcell.io/?lc_t=q_playcrawler)


[ドキュメントでもっと詳しく探索！](https://docs.leapcell.io/)

LeapcellのTwitter: [https://x.com/LeapcellHQ](https://x.com/LeapcellHQ)