DeepSeek ウェブスクレイピング: Table-Soup HTML をクリーンな JSON に変換する
Scraping and Proxy Management Expert
TL;DR:
- DeepSeekは手ごろな価格の抽出エンジンで、乱雑なマークアップに対してその称号を得ています。 このガイドで行った実行では、3,397トークンのネストされたテーブルページからテキスト、著者、タグリストの10件の構造化レコードを抽出しました。このモデルは百万トークンあたり1セント未満で価格付けされています。
- APIは
base_urlの置き換えだけです。 DeepSeekのエンドポイントはOpenAI互換です:公式のOpenAI Python SDKがhttps://api.deepseek.comを指しており、JSONモードをオンにすれば統合は完了します。 - モデル名が最近変更されました — ほとんどのチュートリアルは古くなっています。 現在のモデルは
deepseek-v4-flashとdeepseek-v4-proであり、従来のdeepseek-chatおよびdeepseek-reasonerという名称は2026年7月24日をもって廃止されました。 - モデルはまだ取得できません。 レンダリング、セッション、アクセスの問題は取得レイヤーに属します;このガイドでは、Scrapeless Universal Scraping APIを介してページごとに1回のPOSTを行います。
- DeepSeekキーがまだありませんか?同じリクエストがOpenRouterを通じて実行されます。 このガイドでは、
deepseek/deepseek-v4-flashでそれを実行し、取得した出力を示しています。 - 取得側は無料で始められます。 app.scrapeless.comでScrapeless APIキーを作成してください。
DeepSeekはウェブサイトをスクレイピングできますか?
DeepSeekはページを読みますが、それを取得することはありません。APIはすでに取得したテキストを受け取り、指定したフィールドを返します — そして、トークンあたりの価格が市場の底に位置しているため、抽出が多数のページを跨いで実行されなければならない場合に人々が選ぶモデルです。それらのページを取得し、JavaScriptをレンダリングし、アクセスコントロールに耐えることは、どのチャット補完エンドポイントも提供しない別のレイヤーです。
DeepSeekが際立つのは、手作業で解析したくないマークアップです。セマンティックHTMLはセレクタに優しく、実際のページはしばしばそうではありません。このガイドのデモ対象は、完全にネストされたテーブルとしてレンダリングされた引用ページです — データセル、引用テキスト、著者、タグが行ごとに交互に配置され、セレクタの論理が行数カウントの算術に変わり、次のデザイン変更で消えてしまうような構造です。言語モデルは気にしません:それは人間がそうするようにテーブルを読みます。
計画: 制御された取得レイヤーでテーブルスープページを一度取得し、その後DeepSeekがクリーンなJSONを返すようにします。より広いツールカテゴリに興味がある場合は、LLMスクレイパーの解説やLLMスクレイパーのランク付けリストが分野をマッピングします。
インストール
1つのSDKがネイティブパスとアグリゲーターパスをカバーし、取得用のrequestsも含まれています:
bash
pip install "openai==2.34.0" requests
設定
bash
export DEEPSEEK_API_KEY="sk-your_deepseek_key"
export SCRAPELESS_API_KEY="sk_your_scrapeless_key"
誰も解析したくないページを取得する
対象は、スクレイピングの練習のために構築された公共の引用サイトのテーブルベースのレンダリングです。Universal Scraping APIへの1回のPOSTは、レンダリングおよびサーバーサイドでのロック解除を処理しながらそれを返します:
python
# fetch_tableful.py — Scrapelessを介してテーブルスープページを取得
import os
import requests
resp = requests.post(
"https://api.scrapeless.com/api/v1/unlocker/request",
headers={
"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
},
json={
"actor": "unlocker.webunlocker",
"input": {"url": "https://quotes.toscrape.com/tableful/", "method": "GET"},
},
timeout=120,
)
resp.raise_for_status()
html = resp.json().get("data", "")
print(f"取得した文字数: {len(html):,}文字")
print("テーブル要素:", html.count("<table"), "| テーブル行:", html.count("<tr"))
with open("page.html", "w", encoding="utf-8") as f:
f.write(html)
この実行では、概念的にタグ付きの10件のレコードを持つある1つの<table>と22の<tr>行を印刷します — 引用行とタグ行が交互に配置される、セレクタの作成者が恐れるHTMLテーブル仕様が許可する正確な形状です。
基本的な実装:抽出器としてのDeepSeek
統合は、OpenAI SDK と DeepSeek 特有の二つの値、基本 URL とモデル名を使用します。JSON モード(response_format={"type": "json_object"})と temperature=0 により、出力は解析可能で安定したものになります — パラメータはDeepSeek API リファレンスに文書化されています。現在のモデル名を使用してください:抽出作業には deepseek-v4-flash、本当により多くのモデルが必要な場合には deepseek-v4-pro を使用します;古い deepseek-chat と deepseek-reasoner の名前は 2026年7月24日をもって非推奨となります。
注意:このブロックでは、クレジット付きの
DEEPSEEK_API_KEYが必要です — このガイドはこの前提を仮定していません。次のセクションでは、取得した出力と共に OpenRouter を介して同じ抽出をライブで実行します。
python
# extract_deepseek.py — ネイティブ DeepSeek 抽出(DEEPSEEK_API_KEY が必要)
import json
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.deepseek.com",
api_key=os.environ["DEEPSEEK_API_KEY"],
)
page_html = open("page.html", encoding="utf-8").read()
completion = client.chat.completions.create(
model="deepseek-v4-flash",
temperature=0,
response_format={"type": "json_object"},
messages=[
{
"role": "system",
"content": 'このテーブルベースのページからすべての引用を抽出してください。JSON のみで応答してください:'
'{"quotes":[{"text":str,"author":str,"tags":[str]}]}.',
},
{"role": "user", "content": page_html},
],
)
data = json.loads(completion.choices[0].message.content)
print(f"テーブルマークアップから {len(data['quotes'])} 件の引用を抽出しました")
行の算術はなく、兄弟軸 XPath もありません — スキーマは出力を名付け、モデルが読み取りを行います。
DeepSeek キーがない? OpenRouter を通して実行
両方のサーフェスが OpenAI 型であるため、集約器バリアントは二つの文字列で異なります。これは、このガイドが実行した実際のバージョンで、取得と抽出を一つの自己完結したスクリプトで行います:
python
# extract_openrouter.py — OpenRouter を介して実行される同じ抽出
import json
import os
import requests
from openai import OpenAI
resp = requests.post(
"https://api.scrapeless.com/api/v1/unlocker/request",
headers={
"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
},
json={
"actor": "unlocker.webunlocker",
"input": {"url": "https://quotes.toscrape.com/tableful/", "method": "GET"},
},
timeout=120,
)
resp.raise_for_status()
page_html = resp.json().get("data", "")
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
completion = client.chat.completions.create(
model="deepseek/deepseek-v4-flash",
temperature=0,
response_format={"type": "json_object"},
messages=[
{
"role": "system",
"content": 'このテーブルベースのページからすべての引用を抽出してください。JSON のみで応答してください:'
'{"quotes":[{"text":str,"author":str,"tags":[str]}]}.',
},
{"role": "user", "content": page_html},
],
)
data = json.loads(completion.choices[0].message.content)
print(f"テーブルマークアップから {len(data['quotes'])} 件の引用を抽出しました")
print(json.dumps(data["quotes"][0], ensure_ascii=False))
ライブ実行では、テーブルのスープからすべての 10 レコードを引き出しました。最初のものは:
text
テーブルマークアップから 10 件の引用を抽出しました
{"text": "私たちが創り出した世界は、私たちの思考のプロセスです。私たちの思考を変えずには、変えることはできません。", "author": "アルバート・アインシュタイン", "tags": ["change", "deep-thoughts", "thinking", "world"]}
タグは、そのページでは引用本体とは別の行にレンダリングされているにもかかわらず配列として返されました — モデルは、各タグ行を上の引用行と関連付けました。これは、選択子スクリプトが手動でコーディングする必要がある結合です。全体の呼び出しは 3,397 トークンでした。
無料プランで API キーを取得する: app.scrapeless.com
高度なパターン
- モデルをその価値に見合ったページに予約すること。 DeepSeek はトークンあたり安価で、選択スクリプトは依然として無料で、より安価です。きれいで安定したレイアウトを生成された後にレビューされる選択子コードに流し込み、テーブルのスープ、再設計が危険なもの、長いテールにモデルコールを費やします。
- 行のセマンティクスを把握している場合は述べてください。 このページではプロンプトはそれを必要としませんでしたが、より複雑なテーブルでは、"各レコードは二行で構成される:データ、その後タグ" のような一文が、より大きなモデルよりも安く精度を買います。
- 1つのページにつき1つの呼び出しを行い、Python でループします。 ページの境界はレコードの境界です。プロンプト側のバッチ処理はそれらをぼやけさせます。
- 非推奨のカレンダーを見守ります。 固定されたモデル名は古びます。
deepseek-chatは長い間使われましたが、2026年7月24日に停止します — モデル ID は設定に保存し、十のスクリプトには保存しません。
トラブルシューティング
model_not_foundまたはそれに類するものがネイティブエンドポイントで発生しています。 おそらく、廃止されたモデル名を送信しています;deepseek-v4-flashまたはdeepseek-v4-proへ移行してください。- JSONの代わりにプローズ。 JSONモードがオフになっています —
response_format={"type": "json_object"}を設定し、システムメッセージにスキーマを保持してください。 - レコードがマージされる、またはタグが誤った引用に表示される。 行セマンティクスの文をシステムメッセージに追加し、フェッチされたHTMLが実際に期待する行を含んでいるかを確認してください。フェッチスクリプトが行を数える方法です。
- 出力が実行ごとに変わる。
temperature=0。抽出は記録タスクであり、執筆タスクではありません。
結論
DeepSeekの抽出レイヤーの事例は算術と寛容さです:市場の最下部トークン価格とセレクターロジックを罰するマークアップへの恐怖がありません。テーブルスープデモはその証明 — 匿名の <tr> 行から正しく結合されたタグ配列を持つ10のレコードで、3,397トークンです。モデルが供給できないのは、レンダリングされ、到達可能なページ自体です;ページごとに1つのサーバーサイドPOSTがそれをカバーし、2つのレイヤーが組み合わさることで、実行コストがほとんどかからず、マークアップが変動するときの維持もわずかです。
DeepSeekに実際のページを供給する準備はできていますか?
ここでのフェッチレイヤーはUniversal Scraping APIです — プランとリクエストボリュームは料金ページにあり、すべての unlocker.webunlocker パラメータは開発者ドキュメントに記載されています。無料プランでのキーをapp.scrapeless.comで作成すると、両方のスクリプトは記載された通りに実行されます。
FAQ
Q: DeepSeekは自分でウェブサイトをスクレイピングできますか?
いいえ。DeepSeek APIは言語モデルのエンドポイントです:提供されたテキストから抽出し、リクエストを発行したり、JavaScriptをレンダリングしたり、セッションを保持したりできません。すべての作業するDeepSeekスクレイピング設定は、信頼できるページコンテンツを返すフェッチレイヤーとペアになっています。
Q: ウェブスクレイピングにはどのDeepSeekモデルを使用すればよいですか?
抽出には deepseek-v4-flash を使用してください — このガイドのライブ実行ではこれを使用し、正しいタグ結合を持つ10のレコードを返しました。きれいな入力でそれでも誤ったフィールドが生じるときだけ deepseek-v4-pro を使用してください。新しいコードでは廃止された deepseek-chat と deepseek-reasoner の名前を避けてください。
Q: 抽出には大手モデルではなくDeepSeekを使用する理由は何ですか?
同等の必然性に対して価格。temperature=0 のスキーマに制約された抽出は、現在のほとんどのモデルが通過できる限られたタスクです。すべてのモデルが通過する場合、最も安価な合格モデルが勝ちます。ここでの計測された実行は、百万入力トークンあたり10セント未満のモデルで3,397トークンのコストがかかりました — このレートでは、抽出がパイプラインの高コストな部分でなくなります。
Q: セレクタースクリプトは依然としてDeepSeekよりも優れているのはどの場合ですか?
レイアウトがクリーンで安定していて大量なときです。レビューされたセレクタースクリプトはページごとに永遠にコストがかからない;モデルコールは毎回トークンを消費します。機能する分割:ターゲットの安定コアのためのセレクター、絡まったマークアップやレイアウトが変わり続けるためにDeepSeekを使用します。
Q: DeepSeekを使用したスクレイピングは合法ですか?
抽出モデルは収集ルールを変更しません。公開ページのみをフェッチし、サイトの利用規約とロボット排除プロトコルによって標準化されたロボットの指示を尊重し、ボリュームを制限し、適用法に基づいて個人データを扱ってください — さらに、モデルサイドのDeepSeekの利用規約もあります。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



