---
title: "2026年のQwen3によるウェブスクレイピング：完全チュートリアル"
slug: web-scraping-with-qwen3
date: 2025-06-29T13:17:47+00:00
modified: 2025-11-04T08:48:43+00:00
permalink: https://brightdata.jp/blog/ai/web-scraping-with-qwen3
type: blog
---

[ ブログ ](https://brightdata.jp/blog "ブログ") / [AI](https://brightdata.jp/blog/ai)







 [AI](https://brightdata.jp/blog/ai)

# 2026年のQwen3によるウェブスクレイピング：完全チュートリアル

Qwen3 LLMでウェブスクレイピングをマスターし、セットアップから高度な使用法まで、2026年のAI駆動技術を使用して効率的にデータを抽出します。

 6 分読





 [ ![Antonello Zanini](https://media.brightdata.jp/2022/12/Antonello-Zanini-2-50x50.jpg) ](https://brightdata.com/blog/authors/antonello-zanini)

 [Antonello Zanini

Technical Writer

 ](https://brightdata.com/blog/authors/antonello-zanini)





 ![Real-Time Web Scraping with Qwen3 and Bright Data](https://media.brightdata.jp/2025/06/Real-Time-Web-Scraping-with-Qwen3-and-Bright-Data.png)





このチュートリアルでは

- Qwen3とは何か、そしてLLMとして何が際立っているのか
- ウェブスクレイピング作業に適している理由
- Hugging Faceを使ったウェブスクレイピングのためにQwen3をローカルで使う方法
- 主な制限とその回避方法
- AIによるスクレイピングのためのQwen3に代わるいくつかの方法

さあ、飛び込もう！

## Qwen3とは？

[Qwen3は](https://qwenlm.github.io/blog/qwen3/) [Alibaba CloudのQwenチームによって](https://www.alibabacloud.com/en/solutions/generative-ai/qwen?_p_lc=1)開発された最新世代のLLMだ。このモデルはオープンソースで、Apache 2.0ライセンスの下、[GitHubで自由に探索することができる。](https://github.com/QwenLM/Qwen3)研究開発には最適だ。

Qwen3の主な特徴は以下の通り：

- **ハイブリッド推論**：複雑な論理的推論（数学やコーディングなど）のための「思考モード」と、より高速で汎用的な応答のための「非思考モード」を切り替えることができます。これにより、最適なパフォーマンスとコスト効率を実現するために、推論の深さをコントロールすることができます。
- **多様なモデル**：Qwen3 は、密なモデル（0.6B から 32B のパラメータ）や、MoE（Mixture-of-Experts）モデル（30B や 235B など）を含む、包括的なモデル群を提供しています。
- **強化された能力**：推論、指示フォロー、エージェント機能、多言語サポート（100以上の言語と方言をカバー）において大きな進歩を示している。
- **トレーニングデータ**：Qwen3 は約 36 兆トークンという、前作[Qwen2.5](https://qwenlm.github.io/blog/qwen2.5-max/) の約 2 倍に相当する膨大なデータセットで学習された。

## ウェブスクレイピングにQwen3を使う理由

Qwen3は、HTMLページ内の非構造化コンテンツの解釈と構造化を自動化することで、ウェブスクレイピングを容易にします。これにより、手作業による[データ解析が](/blog/ウェブデータ/what-is-data-parsing)不要になります。データを抽出するために複雑なロジックを書く代わりに、モデルがあなたに代わってページの構造を理解します。

ウェブデータの解析にQwen3を利用することは、次のような[ウェブスクレイピングの一般的な](/blog/ウェブデータ/web-scraping-challenges)課題に対処する際に特に役立ちます：

- **頻繁に変わるページレイアウト**：よくあるシナリオはAmazonで、商品ページごとに異なるデータを表示することができる。
- **非構造化データ**：Qwen3は、ハードコードされたセレクタや[正規表現ロジックを](/blog/ウェブデータ/web-scraping-with-regex)必要とせず、乱雑で自由形式のテキストから価値ある情報を抽出できます。
- **解析が困難なコンテンツ**：一貫性のないページや複雑な構造のページでは、Qwen3のようなLLMを使用することで、独自の解析ロジックが不要になります。

より深く掘り下げるには、[ウェブスクレイピングにAIを使用する](/blog/ウェブデータ/ai-web-scraping)ガイドをお読みください。

もうひとつの大きな利点は、Qwen3がオープンソースであることだ。つまり、サードパーティのAPIに頼ったり、OpenAIのようなプレミアムLLMにお金を払ったりすることなく、自分のマシンでローカルに無料で実行できる。これにより、スクレイピング・アーキテクチャを完全にコントロールすることができる。

## PythonでQwen3を使ってWebスクレイピングを行う方法

このセクションでは、”[Webスクレイピングを学ぶためのEコマーステストサイト](https://www.scrapingcourse.com/ecommerce/)“のサンドボックスにある “Affirm Water Bottle “の商品ページを対象とする：

![対象ページ](https://media.brightdata.com/2025/06/image-56-1024x558.png)Eコマースの商品ページには通常、一貫性のない構造があり、さまざまなタイプのデータが表示されるため、このページは確かな例となる。このばらつきが、[eコマースのウェブスクレイピングを](/blog/各種ご利用方法/ecommerce-web-scraping-guide)特に困難なものにしており、またAIが大きな違いを生み出すところでもある。

ここでは、Qwen3を搭載したスクレーパーを使用し、手動で解析ルールを記述することなく、インテリジェントに商品情報を抽出します。

**注**：このチュートリアルでは、[Hugging Faceを使ってQwen3モデルを](https://huggingface.co/docs/transformers/en/model_doc/qwen3)ローカルで、しかも無料で動かす方法を紹介します。さて、他にも実行可能なオプションがあります。Qwen3モデルをホスティングしているLLMプロバイダーに接続したり、Ollamaのようなソリューションを利用することです。

Qwen3を使用してウェブデータのスクレイピングを開始するには、以下の手順に従ってください！

### ステップ1：プロジェクトの設定

始める前に、あなたのマシンにPython 3.10+がインストールされていることを確認してください。そうでなければ、[ダウンロードして](https://www.python.org/downloads/)インストール手順に従ってください。

次に、以下のコマンドを実行して、スクレイピング・プロジェクト用のフォルダを作成する：

```none
mkdir qwen3-scraper
```

`qwen3-scraper`ディレクトリは、Qwen3を使用したウェブスクレイピングのプロジェクトフォルダとして機能します。

ターミナルでそのフォルダに移動し、その中でPython[仮想環境を](https://docs.python.org/3/library/venv.html)初期化する：

```none
cd qwen3-scraper
python -m venv venv
```

お好みのPython IDEでプロジェクトフォルダをロードします。[Python拡張機能付きのVisual Studio Codeや](https://code.visualstudio.com/docs/languages/python) [PyCharm Community Editionは](https://www.jetbrains.com/pycharm/download/#section=windows)どちらも優れた選択肢です。

プロジェクトのフォルダに`scraper.py`ファイルを作成します：

![Qwen3によるウェブスクレイピングのプロジェクトファイル構造](https://media.brightdata.com/2025/06/image-57.png)今のところ、`scraper.pyは`ただの空のPythonスクリプトですが、すぐにLLMウェブスクレイピングのロジックを含むようになります。

次に、仮想環境をアクティベートする。LinuxまたはmacOSで、実行する：

```none
source venv/bin/activate
```

同様に、Windowsでは

```none
venv/Scripts/activate
```

**注**：以下のステップでは、必要なライブラリーをすべてインストールします。一度にすべてをインストールしたい場合は、以下のコマンドを使用してください：

```none
pip install transformers torch accelerate requests beautifulsoup4 markdownify
```

素晴らしい！あなたのPython環境はQwen3によるWebスクレイピングのために完全にセットアップされています。

### ステップ2：ハギング・フェイスでQwen3を設定する

このセクションの冒頭で述べたように、ハギング・フェイスを使ってQwen3モデルをローカルで走らせる。これは、[ハギング・フェイスが最近Qwen3モデルをサポートするようになったから](https://qwenlm.github.io/blog/qwen3/)です。

まず、有効化された仮想環境にいることを確認してください。次に、必要なハギング・フェイスの依存関係をインストールしてください：

```none
pip install transformers torch accelerate
```

次に、`scraper.py`ファイルで、[Hugging Face の`transformers`ライブラリから](https://huggingface.co/docs/transformers/en/index)必要なクラスをインポートします：

```none
from transformers import AutoModelForCausalLM, AutoTokenizer
```

次に、これらのクラスを使って、トークナイザーとQwen3モデルをロードします：

```none
model_name = "Qwen/Qwen3-0.6B"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="auto"
)
```

今回は[`Qwen/Qwen3-0.6B`](https://huggingface.co/Qwen/Qwen3-0.6B)モデルを使用していますが、[Hugging Faceでは他にも40種類以上のQwen3モデルから](https://huggingface.co/collections/Qwen/qwen3-67dd247413f0e2e4f653967f)お選びいただけます。

素晴らしい！これでPythonスクリプトでQwen3を利用するための準備が全て整いました。

### ステップ #3: ターゲットページのHTMLを取得する

さて、次はターゲットページのHTMLコンテンツを取得する番だ。これはRequestsのような[強力なPython HTTPクライアントを](/blog/ウェブデータ/best-python-http-clients)使うことで実現できます。

起動した仮想環境に、[Requestsライブラリを](https://requests.readthedocs.io/en/latest/)インストールします：

```none
pip install requests
```

そして、`scraper.py`ファイルでライブラリをインポートします：

```none
import requests
```

[`get()`](https://requests.readthedocs.io/en/latest/api/#requests.get)メソッドを使用して、ページURLにHTTP GETリクエストを送信します：

```none
url = "https://www.scrapingcourse.com/ecommerce/product/ajax-full-zip-sweatshirt/"
response = requests.get(url)
```

サーバーはページの生のHTMLで応答する。完全なHTMLコンテンツを見るには、`response.contentを`表示すればよい：

```none
print(response.content)
```

結果はこのHTML文字列になるはずだ：

```none

<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="profile" href="https://gmpg.org/xfn/11">
    <link rel="pingback" href="https://www.scrapingcourse.com/ecommerce/xmlrpc.php">

    <!-- omitted for brevity... -->

    <title>Affirm Water Bottle – Ecommerce Test Site to Learn Web Scraping</title>
    <!-- omitted for brevity... -->
</head>
<body>
    <!-- omitted for brevity... -->
</body>
</html>
```

これでPythonでターゲットページの完全なHTMLが利用できるようになりました。Qwen3を使ってHTMLを解析し、必要なデータを抽出しましょう！

### ステップ#4：ページのHTMLをMarkdownに変換する（オプションだが推奨）

**注**：このステップは厳密には必須ではありません。しかし、ローカルでの時間を大幅に節約することができます（有料のQwen3プロバイダーを使っている場合はお金も節約できます）。ですから、検討する価値はあります。

[Crawl4AIや](/blog/ウェブデータ/crawl4ai-and-deepseek-web-scraping) [ScrapeGraphAIの](/blog/ウェブデータ/web-scraping-with-scrapegraphai)ような他のAIを搭載したウェブスクレイピングツールが生のHTMLをどのように扱うか少し調べてみよう。設定されたLLMにコンテンツを渡す前にHTMLをMarkdownに変換するオプションを提供していることに気づくだろう。

なぜそんなことをするのか？主な理由は2つある：

- **コスト効率**：マークダウン変換により、AIに送信されるトークンの数を減らし、コスト削減に貢献します。
- **処理の高速化**：入力データが少ないため、計算コストが低く、応答が速い。

詳しくは、[新しいAIエージェントがHTMLではなくMarkdownを選ぶ理由についての](https://hackernoon.com/why-are-the-new-ai-agents-choosing-markdown-over-html)ガイドをお読みください。

この場合、Qwen3はローカルで実行されるため、サードパーティのLLMプロバイダーに接続するわけではないので、コスト効率は重要ではない。ここで本当に重要なのは、処理の高速化だ。なぜか？というのも、選択されたQwen3モデル（これは利用可能なモデルの中でも小さい部類に入る）にHTMLページ全体の処理を依頼すると、i7のCPUを数分間100％の使用率に簡単に押し上げることができるからだ。

ノートパソコンやPCをオーバーヒートさせたり、フリーズさせたりしたくないのだから。だから、Markdownに変換することで入力サイズを小さくすることは理にかなっている。

HTMLからMarkdownへの変換ロジックを複製し、トークンの使用量を減らす時が来た！

まず、[対象のウェブページをシークレット・モードで開き](https://www.scrapingcourse.com/ecommerce/product/affirm-water-bottle/)、新しいセッションを確保する。次に、ページ上の任意の場所で右クリックし、”Inspect “を選択してDevToolsを開く。次に、ページの構造を調べてください。すべての関連データが、CSSセレクタ`#mainで`識別されるHTML要素内に含まれていることがわかります：

![商品データを含む#main HTML要素](https://media.brightdata.com/2025/06/image-58-1024x607.png)HTMLからMarkdownへの変換プロセスで`#mainの`中のコンテンツに焦点を当てることで、ページ内の関連データのある部分のみを抽出することができます。これにより、ヘッダーやフッター、その他興味のないセクションを含めずに済みます。そうすれば、最終的なMarkdownの出力はずっと短くなります。

`main`要素内のHTMLだけを選択するには、[Beautiful SoupのようなPythonのHTML解析ライブラリが](/blog/ウェブデータ/best-python-html-parsers)必要です。アクティベートした仮想環境に、次のコマンドでインストールしてください：

```none
pip install beautifulsoup4
```

そのAPIについてよく知らない場合は、[Beautiful Soupのウェブスクレイピングに関する](/blog/各種ご利用方法/beautiful-soup-web-scraping)ガイドに従ってほしい。

そして、`scraper.py` でインポートします：

```none
from bs4 import BeautifulSoup
```

では、ビューティフル・スープを使ってみよう：

1. Requestsで取得した生のHTMLを解析する。
2. `メイン`要素を選択する
3. HTMLコンテンツを抽出する

このスニペットで上記の3つのマイクロステップを実行する：

```none
# Parse the HTML of the page with BeautifulSoup
soup = BeautifulSoup(response.content, "html.parser")

# Select the #main element
main_element = soup.select_one("#main")

# Get the outer HTML of the selected element
main_html = str(main_element)
```

`main_htmlを`表示すると、次のようになる：

```none
<main id="main" class="site-main" role="main" data-testid="main-content" data-content="main-area">
    <!-- omitted for brevity... -->
    <div id="product-2765" class="product type-product post-2765 status-publish first instock product_cat-fitness-equipment has-post-thumbnail shipping-taxable purchasable product-type-simple">
        <!-- omitted for brevity... -->
    </div>
</main>
```

この文字列はHTMLページ全体よりはずっと小さいが、それでも約13,402文字を含んでいる。

重要なデータを失うことなくサイズをさらに小さくするには、抽出したHTMLをMarkdownに変換する。まず、[`markdownify`](https://github.com/matthewwithanm/python-markdownify)ライブラリをインストールする：

```none
pip install markdownify
```

`scraper.pyに` `markdownifyを`インポートします：

```none
from markdownify import markdownify
```

そして、`#mainの`HTMLをMarkdownに変換する：

```none
main_markdown = markdownify(main_html)
```

データ変換処理により、以下のような出力が得られるはずである：

![HTMLとMarkdownの比較](https://media.brightdata.com/2025/06/image-59-1024x446.png)元の`#main`HTMLが13.61KBであるのに対し、Markdownバージョンは約2.53KBである。これは81％のサイズ削減だ！その上、重要なのは、Markdownバージョンはスクレイピングに必要な主要データをすべて保持しているということだ。

この簡単なトリックで、かさばるHTMLスニペットをコンパクトなMarkdown文字列に減らすことができます。これで、Qwen3経由のローカルLLMデータ解析が大幅にスピードアップする！

### ステップ #5: Qwen3を使ってデータを解析する

Qwen3に正しくデータをスクレイピングさせるには、効果的なプロンプトを書く必要があります。ターゲットページの構造を分析することから始めましょう：

![対象ページの構造](https://media.brightdata.com/2025/06/image-60-1024x724.png)ページ上部のセクションはすべての商品で一貫している。一方、「追加情報」の表は商品によって変わります。あなたのプロンプトがプラットフォーム上のすべての商品ページで機能することを望むかもしれないので、あなたのタスクを一般的な用語で次のように記述することができます：

```none
Extract main product data from the HTML content below. Respond with a raw string in JSON format containing the scraped data in product attributes as below:nn
SAMPLE JSON ATTRIBUTES: n
sku, name, images, price, description, category + fields extracted from the "Additional information" section

CONTENT:n
<MARKDOWN_PRODUCT_CONTENT>
```

このプロンプトは、`main_markdown`コンテンツから構造化データを抽出するようQwen3に指示します。信頼できる結果を得るためには、プロンプトをできるだけ明確かつ具体的にすることをお勧めします。そうすることで、モデルがあなたが期待していることを正確に理解できるようになります。

さて、[公式ドキュメントで](https://qwen.readthedocs.io/en/latest/getting_started/quickstart.html#transformers)説明されているように、Hugging Faceを使ってプロンプトを実行する：

```none
# Define tge data extraction prompt
prompt = prompt = f"""Extract main product data from the HTML content below. Respond with a raw string in JSON format containing the scraped data in product attributes as below:nn
SAMPLE JSON ATTRIBUTES: n
sku, name, images, price, description, category + fields extracted from the "Additional information" section

CONTENT:n
{main_markdown}
"""

# Execute the prompt
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
    enable_thinking=False
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32768
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()

# Retrieve the output in text format
product_raw_string = tokenizer.decode(output_ids, skip_special_tokens=True).strip("n")
```

上記のコードでは、[`apply_chat_template()を使って`](https://huggingface.co/docs/transformers/v4.37.1/en/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.apply_chat_template)入力メッセージをフォーマットし、設定されたQwen3モデルからレスポンスを生成しています。

**注**：重要な詳細は、`apply_chat_template()` で`enable_thinking=False を`設定することである。デフォルトでは、このオプションは`Trueに`設定されており、モデル内部の “推論 “モードを有効にします。このタスクは複雑な問題解決には便利ですが、ウェブスクレイピングのような単純なタスクには不要で、逆効果になる可能性があります。これを無効にすると、モデルは説明や仮定を追加することなく、純粋に抽出に集中するようになります。

素晴らしい！Qwen3にターゲットページのWebスクレイピングを実行するよう指示しました。
あとは出力を微調整してJSONにエクスポートするだけです。

### ステップ6：Qwen3の出力を変換する

Qwen3-0.6Bモデルの出力は、実行ごとにわずかに異なることがある。これはLLMの典型的な挙動であり、特に今回使用したような小規模なモデルでは顕著である。

したがって、`product_raw_string`変数には、プレーンなJSON文字列として必要なデータが格納されることもある。また、次のようにJSONをMarkdownコードブロックの中にラップすることもある：

```none
```jsonn{n  "sku": "24-UG06",n  "name": "Affirm Water Bottle",n  "images": ["https://www.scrapingcourse.com/ecommerce/wp-content/uploads/2024/03/ug06-lb-0.jpg"],n  "price": "$7.00",n  "description": "You’ll stay hydrated with ease with the Affirm Water Bottle by your side or in hand. Measurements on the outside help you keep track of how much you’re drinking, while the screw-top lid prevents spills. A metal carabiner clip allows you to attach it to the outside of a backpack or bag for easy access.",n  "category": "Fitness Equipment",n  "additional_information": {n    "Activity": "Yoga, Recreation, Sports, Gym",n    "Gender": "Men, Women, Boys, Girls, Unisex",n    "Material": "Plastic"n  }n}n```
```

両方のケースに対応するには、JSONコンテンツがMarkdownブロックの中に現れた場合、正規表現を使ってJSONコンテンツを抽出することができます。そうでない場合は、文字列を生のJSONとして扱います。そして、結果のJSONデータをPython辞書[`json.loads()`](https://docs.python.org/3/library/json.html#json.loads)にパースします：

```none
# Check if the string contains "```json" and extract the raw JSON if present
match = re.search(r'```jsonn(.*?)n```', product_raw_string, re.DOTALL)

if match:
    # Extract the JSON string from the matched group
    json_string = match.group(1)
else:
    # Assume the returned data is already in JSON format
    json_string = product_raw_string

# Parse the extracted JSON string into a Python dictionary
product_data = json.loads(json_string)
```

さあ、始めるぞ！この時点で、あなたはスクレイピングされたデータを使用可能なPythonオブジェクトにパースしました。最後のステップは、スクレイピングしたデータをより使いやすい形式にエクスポートすることです。

### ステップ#7：スクレイピングしたデータをエクスポートする

これでPython辞書に商品データが入ったので、次のようにJSONファイルに保存できます：

```none
with open("product.json", "w", encoding="utf-8") as json_file:
    json.dump(product_data, json_file, indent=4)
```

これにより、構造化された商品データを含む`product.jsonという`名前のファイルが作成されます。

よくやった！これであなたのQwen3ウェブスクレーパーは完成です。

### ステップ8：すべてをまとめる

スクレイピングスクリプト`scraper.pyの`最終コードです：

```none
from transformers import AutoModelForCausalLM, AutoTokenizer
import requests
from bs4 import BeautifulSoup
from markdownify import markdownify
import json
import re

# The Qwen3 model to use for web scraping
model_name = "Qwen/Qwen3-0.6B"

# Load the tokenizer and the Qwen3 model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="auto"
)

# Fetch the HTML content of the target page
url = "https://www.scrapingcourse.com/ecommerce/product/affirm-water-bottle/"
response = requests.get(url)

# Parse the HTML of the target page with BeautifulSoup
soup = BeautifulSoup(response.content, "html.parser")

# Select the #main element
main_element = soup.select_one("#main")

# Get the outer HTML of the selected element and convert it to Markdown
main_html = str(main_element)
main_markdown = markdownify(main_html)

# Define tge data extraction prompt
prompt = prompt = f"""Extract main product data from the HTML content below. Respond with a raw string in JSON format containing the scraped data in product attributes as below:nn
SAMPLE JSON ATTRIBUTES: n
sku, name, images, price, description, category + fields extracted from the "Additional information" section

CONTENT:n
{main_markdown}
"""

# Execute the prompt
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
    enable_thinking=False
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32768
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()

# Retrieve the output in text format
product_raw_string = tokenizer.decode(output_ids, skip_special_tokens=True).strip("n")

# Check if the string contains "```json" and extract the raw JSON if present
match = re.search(r'```jsonn(.*?)n```', product_raw_string, re.DOTALL)

if match:
    # Extract the JSON string from the matched group
    json_string = match.group(1)
else:
    # Assume the returned data is already in JSON format
    json_string = product_raw_string

# Parse the extracted JSON string into a Python dictionary
product_data = json.loads(json_string)

# Export the scraped data to JSON
with open("product.json", "w", encoding="utf-8") as json_file:
    json.dump(product_data, json_file, indent=4)
```

でスクリプトを実行する：

```none
python scraper.py
```

スクリプトを初めて実行すると、Hugging Faceは選択したQwen3モデルを自動的にダウンロードします。このモデルは約1.5GBあるので、インターネットの速度によってはダウンロードに時間がかかるかもしれません。ターミナルでは、次のような出力が表示されます：

```none
model.safetensors: 100%|██████████████████████████████████████████████████████████| 1.50G/1.50G [00:49<00:00, 30.2MB/s]
generation_config.json: 100%|█████████████████████████████████████████████████████████████████| 239/239 [00:00<?, ?B/s]
```

PyTorchはモデルをロードして実行するためにCPUに負荷をかけるので、スクリプトが完了するまで少し時間がかかるかもしれません。

スクリプトが終了すると、projectフォルダに`product.jsonという`ファイルが作成されます。このファイルを開くと、次のような構造化された商品データが表示されるはずです：

```none
{
    "sku": "24-UG06",
    "name": "Affirm Water Bottle",
    "images": [
        "https://www.scrapingcourse.com/ecommerce/wp-content/uploads/2024/03/ug06-lb-0.jpg"
    ],
    "price": "$7.00",
    "description": "You’ll stay hydrated with ease with the Affirm Water Bottle by your side or in hand. Measurements on the outside help you keep track of how much youu2019re drinking, while the screw-top lid prevents spills. A metal carabiner clip allows you to attach it to the outside of a backpack or bag for easy access.",
    "category": "Fitness Equipment",
    "additional_information": {
        "Activity": "Yoga, Recreation, Sports, Gym",
        "Gender": "Men, Women, Boys, Girls, Unisex",
        "Material": "Plastic"
    }
}
```

**注**：LLMの性質上、スクレイピングされたコンテンツは様々な方法で構造化されるため、正確な出力は若干異なる場合があります。

出来上がり！あなたのスクリプトは、生のHTMLコンテンツをクリーンで構造化されたJSONに変換しました。すべてQwen3のウェブスクレイピングのおかげです。

## ウェブスクレイピングの主な限界の克服

確かに、私たちの例ではすべてがスムーズに動いた。しかしそれは、その目的のために特別に作られたデモサイトをスクレイピングしていたからに他ならない。

現実の世界では、ほとんどのウェブサイトが公開データの価値を十分に認識している。そのため、`requestsの`ようなツールを使って自動化されたHTTPリクエストを素早くブロックできる[アンチスクレイピング技術を](/blog/ウェブデータ/anti-scraping-techniques)実装していることが多い。

さらに、このアプローチはJavaScriptを多用するサイトでは機能しない。`リクエストと`BeautifulSoupの組み合わせは静的なページには有効だが、動的なコンテンツを扱うことができないからだ。この違いについてよくわからない場合は、[静的コンテンツと動的コンテンツについての](/blog/ウェブデータ/static-vs-dynamic-content)記事をご覧ください。

その他の潜在的なブロッカーには、IPバン、レートリミッター、TLSフィンガープリンティング、CAPTCHAなどがある。要するに、ウェブスクレイピングは容易ではないのだ-特に、ほとんどのウェブサイトが[AIクローラーやボットを検知し、ブロック](https://hackernoon.com/ai-agent-browsers-are-failing-and-its-not-just-because-of-captchas)する機能を備えている現在においては。

解決策は、`リクエストによる`最新のウェブスクレイピングのために構築された[**Web Unlocker APIを**](/products/web-unlocker)利用することだ。このようなサービスは、IPのローテーション、CAPTCHAの解決、JavaScriptのレンダリング、ボットプロテクションのバイパスなど、難しいことをすべて代行してくれます。

Web Unlocker API のエンドポイントにターゲットページの URL を渡すだけです。API は、そのページが JavaScript に依存していたり、高度なボット対策システムで保護されていたりしても、完全にロック解除された HTML を返します。

スクリプトに組み込むには、ステップ#3の`requests.get()の`行を以下のコードに置き換えるだけです：

```none
WEB_UNLOCKER_API_KEY = "<YOUR_WEB_UNLOCKER_API_KEY>"

# Set up authentication headers
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {WEB_UNLOCKER_API_KEY}"
}

# Define the payload with the target URL
payload = {
    "zone": "unblocker",
    "url": "https://www.scrapingcourse.com/ecommerce/product/affirm-water-bottle/", # Replace this with your target URL on a different scraping scenario
    "format": "raw"
}

# Send the request
response = requests.post("https://api.brightdata.com/request", json=payload, headers=headers)

# Get the unlocked HTML
html_content = response.text
```

詳細については、[Web Unlockerの公式ドキュメントを](https://docs.brightdata.com/scraping-automation/web-unlocker/introduction)参照してください。

Web Unlocker があれば、Qwen3 を使用して、ブロックやレンダリングの問題、コンテンツの欠落がない、あらゆる Web サイトから構造化データを自信を持って抽出できます。

## ウェブスクレイピングのためのQwen3の代替品

ウェブデータの自動解析に使えるLLMはQwen3だけではありません。以下のガイドで、いくつかの代替アプローチを試してみてください：

- [GeminiによるWebスクレイピング：完全チュートリアル](/blog/ウェブデータ/web-scraping-with-gemini)
- [Perplexityを使ったウェブスクレイピング：ステップバイステップガイド](/blog/ウェブデータ/web-scraping-with-perplexity)
- [ScrapeGraphAIによるLLMウェブスクレイピング](/blog/ウェブデータ/web-scraping-with-scrapegraphai)
- [Crawl4AIとDeepSeekを使ったAIスクレイパーの作り方](/blog/ウェブデータ/crawl4ai-and-deepseek-web-scraping)
- [LLaMAによるウェブスクレイピング3：あらゆるウェブサイトを構造化JSONに変換する](/blog/ウェブデータ/web-scraping-with-llama-3)

## 結論

このチュートリアルでは、AIを搭載したウェブスクレーパーを構築するために、Hugging Faceを使用してQwen3をローカルで実行する方法を学びました。ウェブスクレイピングの最大のハードルの1つはブロックされることですが、Bright Dataの[Web Unlocker APIを使って](/products/web-unlocker)対処しました。

前述したように、Qwen3 と Web Unlocker API を組み合わせることで、事実上あらゆる Web サイトからデータを抽出できます。カスタム解析ロジックは必要ありません。このセットアップは、Bright Dataのインフラストラクチャが可能にする数多くの強力な使用例のほんの一例であり、スケーラブルでAI主導のウェブデータパイプラインの構築を支援します。

では、なぜここで止めるのか？[ウェブスクレーパーAPI-](/products/web-scraper)120以上の人気のあるウェブサイトから、新鮮で、構造化され、完全に準拠したウェブデータを抽出するための[専用](/products/web-scraper)エンドポイントを探索することを検討してください。

今すぐBright Dataの無料アカウントにサインアップして、AI対応のスクレイピング・ソリューションでビルドを始めましょう！



お問い合わせ無料トライアル![google social icon](/wp-content/themes/brightdata/assets/images/ic_google.svg)









 目次







日本企業向けデータソリューション

日本のトップ企業が信頼するスケーラブルなウェブデータプラットフォーム。日本語24時間サポート、GDPR・個人情報保護法準拠、日本企業20社以上の導入実績。

[詳細を見る](https://brightdata.jp/solutions/data-solutions-for-japanese-companies "詳細を見る")







 [ ](https://news.ycombinator.com/submitlink?t=2026%E5%B9%B4%E3%81%AEQwen3%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%EF%BC%9A%E5%AE%8C%E5%85%A8%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB&u=https://brightdata.jp/blog/ai/web-scraping-with-qwen3) [ ](https://www.linkedin.com/shareArticle?mini=true&title=2026%E5%B9%B4%E3%81%AEQwen3%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%EF%BC%9A%E5%AE%8C%E5%85%A8%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB&url=https://brightdata.jp/blog/ai/web-scraping-with-qwen3) [ ](http://www.reddit.com/submit?title=2026%E5%B9%B4%E3%81%AEQwen3%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%EF%BC%9A%E5%AE%8C%E5%85%A8%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB&url=https://brightdata.jp/blog/ai/web-scraping-with-qwen3)







##  あなたは下記にもご興味がおありかもしれません

 [ ![OpenHuman with Bright Data](https://media.brightdata.jp/2026/09/OpenHuman-with-Bright-Data.png) ](https://brightdata.jp/blog/ai/openhuman-with-bright-data "Bright Data CLIを通じたOpenHumanにおける本番対応ウェブアクセス")

 [AI



 ![Antonello Zanini](https://media.brightdata.jp/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Bright Data CLIを通じたOpenHumanにおける本番対応ウェブアクセス

Bright Data CLIをOpenHumanに統合して、AIエージェント向けの本番対応ウェブアクセスとデータ収集を実現します。



 09-Sep-2026

 3 分読

 ](https://brightdata.jp/blog/ai/openhuman-with-bright-data)

 [ ![Multimodal Web Scraping with MiniMax](https://media.brightdata.jp/2026/09/Multimodal-Web-Scraping-with-MiniMax.png) ](https://brightdata.jp/blog/%e3%82%a6%e3%82%a7%e3%83%96%e3%83%87%e3%83%bc%e3%82%bf/multimodal-web-scraping-with-minimax "MiniMaxによるマルチモーダルウェブスクレイピング")

 [ウェブデータ



 ![Antonello Zanini](https://media.brightdata.jp/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### MiniMaxによるマルチモーダルウェブスクレイピング

Bright Data Web UnlockerとMiniMax M3ビジョンを組み合わせて、画像やウェブページのスクリーンショットから構造化データを抽出します。



 09-Sep-2026

 1 分読

 ](https://brightdata.jp/blog/%e3%82%a6%e3%82%a7%e3%83%96%e3%83%87%e3%83%bc%e3%82%bf/multimodal-web-scraping-with-minimax)

 [ ![The 10 Best CLI Tools for Codex in 2026](https://media.brightdata.jp/2026/08/The-10-Best-CLI-Tools-for-Codex-in-2026.png) ](https://brightdata.jp/blog/ai/best-cli-tools-for-codex "2026年版 Codex向けCLIツール10選 – テスト＆ランキング")

 [AI



 ![Daniel Shashko](https://media.brightdata.jp/2022/04/Daniel-Shashko-2-50x50.png)

Daniel Shashko

Web Data &amp; AI Expert





### 2026年版 Codex向けCLIツール10選 – テスト＆ランキング

Codexをより速く、より有能にする10のCLIツール。サンドボックス内から実際のウェブアクセスを提供するBright Data CLIから始まります。



 06-Sep-2026

 4 分読

 ](https://brightdata.jp/blog/ai/best-cli-tools-for-codex)
