Quay lại blog

DeepSeek Scraper API: Nắm bắt Câu trả lời, Lý do và Nguồn như JSON

Ava Wilson
Ava Wilson

Expert in Web Scraping Technologies

11-Aug-2026

TL;DR:

  • Diễn viên scraper.deepseek gửi một lời nhắc cho DeepSeek và trả về câu trả lời dưới dạng JSON. Hai đầu vào cần thiết — promptcountry — được đưa vào; một đối tượng task_result với 21 trường được trả về, bao gồm markdown đã được hiển thị, html thô, và số lượng token.
  • Quá trình lập luận có trong payload, không được ẩn đi. Gửi thinking: true và phản hồi nhận được một đoạn THINK mang văn bản lập kế hoạch từng bước của DeepSeek cộng thêm thời gian nó đã dành cho điều đó.
  • Hai cờ boolean thay đổi hình dạng của phản hồi, không chỉ nội dung của nó. thinkingsearch mỗi cái thêm loại đoạn; gửi cả hai chuyển DeepSeek vào một chuỗi tác động mà tìm kiếm, mở các trang riêng lẻ, và lập kế hoạch lại giữa các bước.
  • Các khóa đầu vào không xác định được chấp nhận và bị bỏ qua mà không có bình luận. web_search, thinking_enabled, search_enabled, và model đều trả về HTTP 201 và không thay đổi gì — trong khi một khóa có tên chính xác với loại sai trả về 400. Di chuyển một kịch bản ghi từ một diễn viên khác và các cờ của nó biến mất trên đường vào.
  • Trích dẫn đến trong ba mã hóa khác nhau tùy thuộc vào các cờ bạn đã gửi. Chế độ tìm kiếm đơn giản sử dụng các dấu [citation:N] đối với cite_index; chế độ tác động sử dụng các dấu [reference:N] đối với một mảng con trỏ phẳng bắt đầu từ 0. Hướng dẫn này chỉ cho bạn cách giải quyết cả hai.
  • Miễn phí để bắt đầu. Tài khoản Scrapeless mới bao gồm tín dụng dùng thử miễn phí — đăng ký tại app.scrapeless.com.

Giới thiệu: câu trả lời chỉ là một nửa payload

Tìm kiếm một API DeepSeek scraper và gần như mọi thứ bạn tìm thấy đều liên quan đến việc chỉ định mô hình DeepSeek vào HTML mà bạn đã lấy. Đó là một kỹ thuật thực sự, và Scrapeless đề cập đến nó trong hướng dẫn web scraping DeepSeek. Hướng dẫn này chạy theo hướng ngược lại: DeepSeek là nguồn, và dữ liệu bạn muốn là những gì DeepSeek nói khi ai đó hỏi nó một câu hỏi.

Dữ liệu đó có ý nghĩa vì lý do tương tự như câu trả lời của ChatGPT và Gemini. Khi một người mua hỏi một trợ lý công cụ nào nên chọn, câu trả lời và các trang phía sau nó là một tín hiệu của thị trường. DeepSeek thêm hai điều mà các trợ lý khác không hề giao một cách dễ dàng: một dấu vết lập luận bị lộ ra, và — khi bạn bật cả hai cờ khả năng của nó — một bản ghi rõ ràng về các trang mà nó đã chọn để mở và đọc đầy đủ.

Diễn viên scraper.deepseek biến tất cả điều đó thành hai cuộc gọi HTTP: một để gửi lời nhắc, một để thu thập kết quả. Hướng dẫn này bao gồm hình dạng yêu cầu, sơ đồ phản hồi hoàn chỉnh được ghi lại từ các cuộc chạy trực tiếp, một khách hàng Python có thể chạy được, và logic giải quyết trích dẫn mà payload yêu cầu và không tài liệu.


Những gì bạn có thể làm với nó

  • Theo dõi cách DeepSeek mô tả danh mục của bạn. Chạy một tập hợp lời nhắc cố định theo lịch trình và lưu câu trả lời markdown cộng với các nguồn phía sau nó.
  • Ghi lại lý do phía sau kết luận. Đoạn THINK cho thấy cách DeepSeek đã hình dung câu hỏi trước khi trả lời — hữu ích khi bạn quan tâm tại sao một sản phẩm được đề xuất.
  • Đo lường tỷ lệ trích dẫn. Trong chế độ tìm kiếm, payload mang theo mọi nguồn mà DeepSeek đã truy xuất, với tiêu đề, URL, tên trang web, và dấu thời gian xuất bản.
  • Phân tách các trang mà DeepSeek đã mở từ những trang mà nó chỉ đơn giản liệt kê. Trong chế độ tác động, các đoạn TOOL_OPEN ghi lại các URL cụ thể mà nó đã đọc từ đầu đến cuối — một tập hợp hẹp hơn nhiều so với các kết quả tìm kiếm.
  • So sánh thị trường. country cố định lối đi ra của cuộc chạy, vì vậy cùng một lời nhắc có thể được ghi lại cho nhiều khu vực khác nhau và so sánh.
  • Xây dựng các tập dữ liệu câu trả lời. Lời nhắc, câu trả lời, lý do, và nguồn được gửi như một đối tượng JSON cho mỗi cuộc chạy, sẵn sàng để lưu trữ.

Tại sao lại là Scrapeless DeepSeek Scraper

Diễn viên scraper.deepseek thuộc về gia đình LLM Chat Scraper trong dòng Universal Scraping API:

  • Một lời nhắc vào, câu trả lời có cấu trúc ra. Xử lý đăng nhập và việc tái lắp ghép liên tục diễn ra ở phía máy chủ, vì vậy bạn không bao giờ chạm vào một giao diện không được xây dựng để phân tích.
  • Luồng đoạn được bảo tồn. Lập luận, truy vấn tìm kiếm, các trang đã mở, và câu trả lời cuối cùng đến dưới dạng các đối tượng kiểu riêng biệt chứ không phải là một chuỗi phẳng.
  • Lối đi ra dành cho cư dân đã được cố định theo quốc gia. Các cuộc chạy đi qua các proxy cư dân trên hơn 195 quốc gia; đầu vào country cần thiết là toàn bộ cấu hình.
  • Một hợp đồng xuyên suốt gia đình. Điểm cuối, tiêu đề x-api-token, và quy trình gửi sau đó thu thập là giống nhau cho các diễn viên ChatGPT, Gemini, Perplexity, Copilot, và Grok.
    Một lưu ý về tài liệu: hướng dẫn nhanh LLM Chat Scraper mô tả quy trình công việc chung và liệt kê các tác nhân khác trong gia đình, nhưng vẫn chưa có một trang DeepSeek. Mọi trường và cờ được mô tả dưới đây đều được ghi lại từ các đợt chạy trực tiếp với tác nhân thay vì đọc từ trang tài liệu.

Điều kiện tiên quyết

  • Một tài khoản Scrapeless và khóa API — tạo một cái tại app.scrapeless.com.
  • curljq cho việc bắt nhanh, hoặc Python 3.10+ cho khách hàng.
  • Sự quen thuộc với HTTP và JSON.

Giữ khóa trong môi trường để nó không bao giờ đến được cây nguồn của bạn:

bash Copy
export SCRAPELESS_API_KEY=your_api_token_here

Cách DeepSeek Scraper API hoạt động

Tác nhân là không đồng bộ. Bạn tạo một nhiệm vụ, sau đó thu thập nó.

  • Gửi: POST https://api.scrapeless.com/api/v2/scraper/request201 với {"status": "pending", "task_id": "..."}
  • Thu thập: GET https://api.scrapeless.com/api/v2/scraper/result/{task_id}202 với {"status": "running"} trong khi quá trình chạy đang diễn ra, sau đó 200 với kết quả đầy đủ
  • Tiêu đề xác thực: x-api-token: $SCRAPELESS_API_KEY

202 đang thực hiện đúng nhiệm vụ mà các quy tắc ngữ nghĩa HTTP định nghĩa cho nó: yêu cầu đã được chấp nhận, quá trình xử lý chưa hoàn tất, và kết quả nằm ở một vị trí khác. Theo dõi vị trí đó theo khoảng thời gian cố định cho đến khi nó trả lời 200. Kết quả hoàn thành được giữ trong năm phút, vì vậy hãy thu thập ngay hoặc đăng ký webhook thay thế.

Tham số yêu cầu

trường đầu vào bắt buộc loại mô tả
prompt chuỗi câu hỏi gửi đến DeepSeek
country chuỗi mã quốc gia hai chữ cho egress nhà ở của chạy, ví dụ US
thinking không boolean phơi bày dấu vết lý do của DeepSeek dưới dạng một đoạn THINK
search không boolean cho phép chạy truy cập các nguồn web trực tiếp và trả về chúng trong payload

Cả hai trường bắt buộc đều được xác thực khi gửi. Bỏ qua country sẽ trả về 400 với Key: 'deepseekParam.Country' Error:Field validation for 'Country' failed on the 'required' tag; bỏ qua prompt sẽ trả về thông điệp khớp cho Prompt. Mã quốc gia tuân theo tiêu chuẩn ISO 3166-1 alpha-2.

Bắt nhanh bằng curl

Gửi nhiệm vụ, theo dõi nó đến hoàn tất, và in tóm tắt cấu trúc:

bash Copy
TASK_ID=$(curl -sS -X POST https://api.scrapeless.com/api/v2/scraper/request \
  -H "Content-Type: application/json" \
  -H "x-api-token: ${SCRAPELESS_API_KEY}" \
  -d '{
    "actor": "scraper.deepseek",
    "input": {"prompt": "Explain how HTTP caching headers work.", "country": "US"}
  }' | jq -r '.task_id')
echo "task_id=${TASK_ID}"

for _ in $(seq 1 60); do
  BODY=$(curl -sS -H "x-api-token: ${SCRAPELESS_API_KEY}" \
    "https://api.scrapeless.com/api/v2/scraper/result/${TASK_ID}")
  echo "${BODY}" | jq -e '.status == "success"' >/dev/null 2>&1 && break
  sleep 4
done

echo "${BODY}" | jq -r '"status=" + .status,
  "fragments=" + ([.task_result.fragments[].type] | join(",")),
  "answer_chars=" + (.task_result.markdown | length | tostring),
  "tokens=" + (.task_result.accumulated_token_usage | tostring)'

Bao bì phản hồi

Một cuộc gọi thu thập hoàn thành trả về một tài liệu JSON đơn giản, nằm trong tiêu chuẩn mà tiêu chuẩn định dạng trao đổi JSON định nghĩa, với hai khóa cấp cao: statustask_result.

json Copy
// illustrative sample — every key and type below is from live scraper.deepseek runs; long strings abridged
{
  "status": "success",
  "task_result": {
    "markdown": "To handle caching, an HTTP response carries…",
    "html": "<p class=\"ds-markdown-paragraph\">…</p>",
    "fragments": [
      {"type": "RESPONSE", "id": 2, "stage_id": 1, "content": "To handle caching…", "references": []}
    ],
    "accumulated_token_usage": 637,
    "thinking_enabled": false,
    "search_enabled": false,
    "search_triggered": false,
    "status": "FINISHED",
    "quasi_status": "FINISHED",
    "role": "ASSISTANT",
    "message_id": 2,
    "parent_id": 1,
    "conversation_mode": "DEFAULT",
    "inserted_at": 1786037083.6987588,
    "model": "",
    "feedback": null,
    "incomplete_message": null,
    "auto_continue": false,
    "ban_edit": false,
    "ban_regenerate": false,
    "has_pending_fragment": false
  }
}

Từng trường một:

trường loại nó chứa gì
task_result.markdown chuỗi câu trả lời bằng Markdown, theo tiêu chuẩn CommonMark — đây là trường mà hầu hết các pipeline mong muốn
task_result.html chuỗi câu trả lời tương tự như HTML đã biên dịch, mang tên lớp ds-markdown-* của chính DeepSeek
task_result.fragments[] mảng luồng đã sắp xếp của các bước kiểu đã tạo ra câu trả lời; xem phần tiếp theo
task_result.accumulated_token_usage số mã thông báo đã tiêu thụ bởi chạy
task_result.thinking_enabled boolean phát ra liệu dấu vết lý do đã được yêu cầu
task_result.search_enabled boolean phát ra liệu việc truy cập trực tiếp đã được yêu cầu
task_result.search_triggered boolean liệu truy xuất thực sự đã chạy
task_result.status / quasi_status chuỗi cả hai đọc FINISHED trên một lần chạy hoàn thành
task_result.role chuỗi ASSISTANT
task_result.message_id / parent_id số vị trí trong cuộc trò chuyện; một lần chạy mới là tin nhắn 2 dưới cha 1
task_result.inserted_at số dấu thời gian Unix với giây phân số
task_result.conversation_mode chuỗi DEFAULT trên mỗi lần chạy được ghi lại
task_result.model chuỗi rỗng trên mỗi lần chạy được ghi lại cho hướng dẫn này, bao gồm cả các lần chạy đã cung cấp một model đầu vào
task_result.feedback / incomplete_message null dự trữ; null trên các lần chạy hoàn thành
task_result.auto_continue, ban_edit, ban_regenerate, has_pending_fragment boolean cờ trạng thái giao diện, tất cả false trên một lần chạy hoàn thành

Xem model như không khả dụng thay vì như một trường để đọc. Nếu bạn cần biết cấu hình nào đã tạo ra một bản ghi, hãy ghi lại các cờ bạn gửi cùng với phản hồi.

Nhận khóa API của bạn trên gói miễn phí: app.scrapeless.com


Luồng đoạn là nơi chi tiết sống

fragments là trường tách biệt diễn viên này với một bản ghi chat thông thường. Chiều dài và thành phần của nó thay đổi với các cờ mà bạn gửi:

cờ gửi chuỗi đoạn những gì bạn nhận được
không có RESPONSE chỉ câu trả lời
thinking: true THINK, RESPONSE văn bản lý do và thời gian của nó
search: true SEARCH, RESPONSE các truy vấn mà DeepSeek phát hành và mọi nguồn mà nó đã lấy được
cả hai THINK, TOOL_SEARCH, THINK, TOOL_OPEN × N, THINK, RESPONSE một vòng lặp tác nhân: lập kế hoạch, tìm kiếm, lập kế hoạch lại, mở các trang cá nhân, lập kế hoạch lại, trả lời

Các loại đoạn mang theo những khóa khác nhau, đây là phần làm cho các trình phân tích ngây thơ bị sốc:

  • RESPONSEcontent, id, stage_id, type, references. content là câu trả lời với các dấu trích dẫn vẫn được nhúng.
  • THINK — các khóa giống nhau cộng với elapsed_secs. Trong chế độ chỉ lý do, dấu vết là một khối dài; trong chế độ tác nhân, nó trở thành một số ghi chú lập kế hoạch ngắn giữa các cuộc gọi công cụ.
  • SEARCHqueries (các chuỗi tìm kiếm mà DeepSeek đã tạo), results (các nguồn), status, và một contentnull. Không có stage_id.
  • TOOL_SEARCH — tương đương với SEARCH trong chế độ tác nhân, với một stage_id được thêm vào.
  • TOOL_OPENreference (một con trỏ quay lại đoạn tìm kiếm đã hiện lên URL) và một đối tượng result duy nhất cho một trang đã được mở. Không có content, không có references.

Mỗi đối tượng nguồn — trong SEARCH.results, TOOL_SEARCH.results, và TOOL_OPEN.result — mang theo tám khóa giống nhau: title, url, snippet, site_name, site_icon, published_at, query_indexes, và cite_index.

Một phiên chạy tác nhân được ghi lại cho hướng dẫn này sản xuất 13 đoạn: một kế hoạch mở đầu, một TOOL_SEARCH đã chạy bốn truy vấn và trả về 38 URL độc nhất, tám đoạn TOOL_OPEN cho các trang mà DeepSeek đã chọn để đọc đầy đủ, hai ghi chú lập kế hoạch nữa, và câu trả lời. Bộ TOOL_OPEN là bộ thú vị — tám URL đó là những gì DeepSeek thực sự đã đọc, khác biệt với 38 mà nó chỉ thấy.

Hành vi lý do mà điều này tiết lộ là cùng khả năng được mô tả trong bài báo học sâu DeepSeek-R1; đóng góp của diễn viên là làm cho dấu vết có sẵn dưới dạng một trường thay vì một bảng điều khiển đã được hiển thị.


Tích hợp API trong Python

Một khách hàng hoàn chỉnh: gửi, theo dõi đến khi hoàn thành, và lập chỉ mục các nguồn theo số trích dẫn của chúng.

python Copy
# deepseek_client.py — submit a prompt to scraper.deepseek and collect the result
import os
import time

import requests

BASE = "https://api.scrapeless.com/api/v2/scraper"
HEADERS = {
    "Content-Type": "application/json",
    "x-api-token": os.environ["SCRAPELESS_API_KEY"],
}


def ask_deepseek(prompt, country="US", thinking=False, search=False, interval=4):
    created = requests.post(
        f"{BASE}/request",
        headers=HEADERS,
        json={
            "actor": "scraper.deepseek",
            "input": {
                "prompt": prompt,
                "country": country,
                "thinking": thinking,
                "search": search,
            },
        },
        timeout=60,
    )
    created.raise_for_status()
    task_id = created.json()["task_id"]

    while True:
        collected = requests.get(f"{BASE}/result/{task_id}", headers=HEADERS, timeout=120)
        if collected.status_code == 200:
            return collected.json()
        if collected.status_code != 202:
            raise RuntimeError(f"task {task_id} did not complete: {collected.text}")
        time.sleep(interval)


def sources_by_citation(result):
    """Every source the run produced, keyed by the cite_index used in the answer."""
    found = {}
    for fragment in result.get("fragments") or []:
        for source in fragment.get("results") or []:
            found[source.get("cite_index")] = source
        if fragment.get("result"):
            found[fragment["result"].get("cite_index")] = fragment["result"]
    return found


if __name__ == "__main__":
    payload = ask_deepseek(
        "What are the latest developments in fusion energy research?",
        search=True,
    )
    result = payload["task_result"]
    fragments = result.get("fragments") or []
    cited = sources_by_citation(result)
    print(f"status={payload['status']} search_triggered={result['search_triggered']}")
    print("fragments=" + ",".join(f.get("type", "?") for f in fragments))
    print(f"answer_chars={len(result['markdown'])} tokens={result['accumulated_token_usage']}")
    print(f"sources={len(cited)}")
    for index in sorted(k for k in cited if isinstance(k, int))[:3]:
        source = cited[index]
        print(f"  [citation:{index}] {source['site_name']} -> {source['url']}")

Một phiên chạy được ghi lại:

text Copy
status=success search_triggered=True
fragments=SEARCH,RESPONSE
answer_chars=7664 tokens=926
sources=11
  [citation:1] Lawrence Livermore National Laboratory (.gov) -> https://lasers.llnl.gov/news/llnl-experts-help-advance-inertial-fusion-energy-us-ife-conference
  [citation:2] Reuters -> https://www.reuters.com/business/energy/fusion-energy-developer-tae-signs-helium-3-future-fuel-supply-option-agreement-2026-08-05/
  [citation:3] Oak Ridge National Laboratory (.gov) -> https://www.ornl.gov/news/oak-ridge-national-lab-cleveland-clinic-and-ibm-achieve-first-known-computations-fusion?utm_source=Sutor-Group-Intelligence-and-Advisory&utm_medium=daily-links&utm_campaign=Substack

Những nhãn [citation:N] đó là các dấu hiệu giống nhau được nhúng trong văn bản câu trả lời, vì vậy các dòng in ra đã là một chỉ mục trích dẫn hoạt động. Lưu ý URL thứ ba nữa — URL nguồn đến đúng như DeepSeek đã gặp chúng, bao gồm cả thông số theo dõi giới thiệu, vì vậy hãy chuẩn hóa trước khi bạn nhóm các bản ghi theo miền hoặc loại bỏ trùng lặp chúng.

Chuyển đổi cuộc gọi sang thinking=True, search=True thay thế đoạn SEARCH phẳng bằng chuỗi tác nhân và cho bạn bộ trang đã mở thay vào đó. Chế độ đó là nơi dấu vết lý do sống, và cũng là nơi mà tải trọng ít dự đoán hơn — xem hai phần tiếp theo trước khi bạn xây dựng dựa trên nó.


Giải quyết trích dẫn

DeepSeek đánh dấu các nguồn của nó bên trong văn bản câu trả lời, và định dạng đánh dấu phụ thuộc vào các cờ nào tạo ra phiên chạy. Hai kết hợp cờ, ba mã hóa giữa chúng, tất cả đã được xác nhận với các bản ghi trực tiếp:

Chỉ tìm kiếm. Đoạn RESPONSE của content mang [citation:N] dấu hiệu, nơi N phù hợp với trường cite_index trên các mục trong đoạn SEARCH của results. markdown cấp trên trong chế độ này mang theo một mã hóa thứ hai của cùng thông tin: các dấu hiệu đó đã được giải quyết thành các liên kết Markdown trong dòng. Một pipeline chỉ cần văn bản có thể đọc có thể đọc markdown và bỏ qua việc kết nối hoàn toàn.

Suy nghĩ và tìm kiếm cùng nhau. Các dấu hiệu trở thành [reference:N], và N là một chỉ mục bắt đầu bằng không vào mảng RESPONSE của đoạn references — không phải một cite_index. Mỗi mục trong mảng đó là một con trỏ quay lại có dạng {"id": 5, "type": "TOOL_OPEN"} xác định đoạn đã cung cấp nguồn. Trong chế độ này, markdown cấp trên là byte-identical với nội dung RESPONSE, các dấu hiệu và tất cả, vì vậy việc kết nối là tùy thuộc vào bạn.
Trường hợp thứ hai có một giới hạn rõ ràng mà bạn cần biết trước khi xây dựng báo cáo trên đó. Một TOOL_OPEN back-pointer được giải quyết rõ ràng, vì đoạn đó chỉ chứa một result và do đó chỉ chứa một URL. Một TOOL_SEARCH back-pointer thì không — nó tên một đoạn chứa hàng chục kết quả, vì vậy nó cho bạn biết rằng yêu cầu đến từ bước tìm kiếm mà không chỉ ra nguồn cụ thể. Trong một lần ghi nhận agentic, 45 trong số 69 tham chiếu chỉ vào các đoạn TOOL_OPEN và được giải quyết tới các URL cụ thể; 24 cái còn lại chỉ vào đoạn tìm kiếm như một tổng thể. Cũng lưu ý rằng cite_indexnull trên các kết quả bên trong các đoạn agentic-mode, vì vậy nó không thể được sử dụng như một phương án thay thế ở đó.

Hệ quả thực tiễn: nếu việc phân bổ nguồn theo từng yêu cầu là điều cần thiết, hãy chạy với search: true một mình và sử dụng cite_index. Nếu bạn muốn theo dõi lý do và danh sách các trang thực sự đã mở, hãy chạy với cả hai cờ và coi liên kết tài liệu là một phần.


Các vấn đề về hình dạng dữ liệu thường gặp

  • Các khóa đầu vào không xác định sẽ được chấp nhận và bỏ qua trong im lặng. Gửi web_search: true, thinking_enabled: true, search_enabled: true, hoặc model: "deepseek-reasoner" đều trả về 201 và tạo ra một lần chạy với cờ không được thiết lập và không có cảnh báo nào trong dữ liệu tải. Các tên hoạt động chính xác là thinkingsearch. Một khóa có tên chính xác nhưng loại sai hành xử khác — thinking: "true" dưới dạng chuỗi trả về 400 invalid params — vì vậy API xác thực các loại trên các khóa mà nó nhận diện và bỏ qua phần còn lại. Nếu bạn đang chuyển một kịch bản ghi nhận ChatGPT, cờ web_search của nó sẽ biến mất và mỗi câu trả lời DeepSeek sẽ quay lại mà không có nguồn.
  • Một quốc gia không được hỗ trợ sẽ thất bại khi thu thập, không phải khi gửi. country: "ZZ" trả về một 201 bình thường với một task_id; thất bại xuất hiện trong cuộc gọi thu thập như 400 với {"message": "execution failed", "status": "failed"}. Xác thực mã quốc gia ở bên bạn thay vì đọc trạng thái gửi như một xác nhận.
  • markdown và nội dung RESPONSE không phải lúc nào cũng là cùng một chuỗi. Trong chế độ chỉ tìm kiếm markdown dài hơn, vì các dấu hiệu tham chiếu đã được mở rộng thành các liên kết. Trong mọi chế độ khác, hai cái này khớp nhau. Chọn một trường và giữ nguyên với nó.
  • references không phải là một danh sách trích dẫn. Nó là một mảng các {id, type} back-pointers, và nó trống rỗng trừ khi ở chế độ agentic. Các nguồn tự chúng tồn tại trên các đoạn tìm kiếm và mở.
  • Các tập hợp khóa đoạn khác nhau theo loại. SEARCHqueriesresults nhưng không có stage_id; TOOL_OPENreference và một result đơn lẻ nhưng không có content. Đọc các đoạn bằng type, không bao giờ theo vị trí.
  • Chế độ agentic thay đổi nhiều hơn so với các chế độ phẳng. Các lần chạy chỉ tìm kiếm quay lại dưới dạng SEARCH, RESPONSE trong mỗi lần ghi nhận thực hiện cho hướng dẫn này. Với cả hai cờ được thiết lập, các lần ghi nhận liên tiếp của cùng một yêu cầu đã mở 8, 15, và 13 trang, chiều dài câu trả lời dao động từ 3,720 đến 6,707 ký tự, và một số lần chạy đã đi thẳng từ TOOL_SEARCH đến RESPONSE mà không mở một trang nào. Nếu đường ống của bạn cần bộ trang đã mở, hãy coi một bộ trống là một kết quả bình thường và đọc dãy số thay vì một lần chạy đơn lẻ.
  • Một tác vụ có thể kết thúc trong trạng thái thất bại, và điều này thể hiện ở cuộc gọi thu thập. Một thiểu số các lần chạy agentic đã kết thúc với trạng thái thất bại thay vì thành công; cuộc gọi thu thập sau đó trả lời 400 thay vì 200, chính xác như một quốc gia không được hỗ trợ làm. Khách hàng ở trên kiểm tra 202 trước khi tiếp tục và phát sinh với nội dung trên bất cứ điều gì khác, vì vậy mã tác vụ và tin nhắn của máy chủ đều đến được nhật ký của bạn. Hãy coi một tác vụ thất bại là một kết quả được ghi nhận trong bộ dữ liệu của bạn, chứ không phải là thứ gì đó để phủ nhận.

Các tác nhân cộng sự

Điểm cuối, tiêu đề, và luồng gửi-then-collect giữ nguyên trong toàn bộ gia đình — chỉ có tên tác nhân và các đầu vào cụ thể cho nền tảng là thay đổi:

  • scraper.chatgptprompt cộng với country, với một cờ web_search riêng.
  • scraper.gemini — cùng hai trường đầu vào, trả về câu trả lời cộng với một mảng trích dẫn.
  • scraper.perplexity — yêu cầu country và một cờ web_search; trả về kết quả web và các yêu cầu liên quan.
  • scraper.grok — yêu cầu một mode lý do và trả về các trích dẫn mở-web và X như các mảng riêng biệt; được trình bày trong hướng dẫn API Grok scraper.
  • scraper.copilotscraper.alexa — câu trả lời của Copilot và Alexa hiển thị dưới cùng một hợp đồng.
    Bởi vì mỗi diễn viên gán tên cờ của mình khác nhau, hãy giữ trình tạo đầu vào theo từng diễn viên thay vì chia sẻ một từ điển giữa chúng. Giá cả dựa trên mức sử dụng cho dòng lệnh, với tín dụng dùng thử miễn phí khi đăng ký, có trên trang giá cả.

Kết luận: hai cuộc gọi và một dữ liệu đáng để đọc kỹ

Bắt DeepSeek là hai cuộc gọi HTTP: POST { actor: "scraper.deepseek", input: { prompt, country } } để tạo một nhiệm vụ, sau đó GET kết quả cho đến khi nó trả lời 200. Câu trả lời nằm trong markdown. Mọi thứ làm cho DeepSeek trở nên khác biệt — dấu vết lý do, các truy vấn tìm kiếm, các trang mà nó mở ra — nằm trong fragments, và chỉ khi bạn yêu cầu điều đó với thinkingsearch. Đặt tên hai cờ đó chính xác, vì API sẽ chấp nhận bất kỳ điều gì khác bạn gửi và lặng lẽ bỏ qua nó.

Sẵn sàng để Bắt Lấy Câu Trả Lời của DeepSeek dưới Dữ Liệu?

Tham gia cộng đồng của chúng tôi để nhận một gói miễn phí và so sánh ghi chú với các nhà phát triển đang xây dựng các đường ống câu trả lời AI: Discord · Telegram.

Đăng ký tại app.scrapeless.com để nhận tín dụng dùng thử miễn phí, và chỉ scraper.deepseek vào các nhắc nhở và thị trường mà chương trình giám sát của bạn bao phủ.

Câu Hỏi Thường Gặp

Q: Làm thế nào tôi có thể xác thực một yêu cầu API DeepSeek scraper?

Mỗi cuộc gọi mang theo tiêu đề x-api-token: <your key>, cả trên yêu cầu gửi và yêu cầu thu thập. Một khóa tài khoản bao phủ scraper.deepseek và tất cả các diễn viên Scrapeless khác. Tạo một khóa trên gói miễn phí tại app.scrapeless.com.

Q: Tại sao yêu cầu trả về task_id thay vì câu trả lời?

Diễn viên hoạt động bất đồng bộ, vì vậy một yêu cầu gửi sẽ trả về 201 với {"status": "pending", "task_id": "..."} và câu trả lời sẽ đến từ một cuộc gọi thứ hai đến /api/v2/scraper/result/{task_id}. Điểm cuối đó sẽ trả về 202 với {"status": "running"} cho đến khi chạy hoàn tất, sau đó 200 với task_result đầy đủ. Kết quả hoàn thành được giữ trong năm phút; một URL webhook là lựa chọn thay thế cho việc đánh giá.

Q: Làm thế nào tôi có thể lấy dấu vết lý do của DeepSeek?

Gửi "thinking": true trong đầu vào. Phản hồi sau đó chứa một đoạn THINKcontent là văn bản lý do và elapsed_secs là thời gian dành cho nó. Nếu không có cờ đó, lý do sẽ không được tạo ra và thinking_enabled sẽ trở lại false.

Q: Liệu DeepSeek scraper có trả về nguồn và trích dẫn không?

Có, khi bạn gửi "search": true. Nguồn đến dưới dạng các đối tượng với title, url, snippet, site_name, site_icon, published_at, query_indexes, và cite_index, đính kèm vào đoạn SEARCH hoặc TOOL_SEARCH. Nếu không có cờ, không có nguồn nào được lấy và câu trả lời được tạo ra từ mô hình một mình.

Q: Tại sao tham số web_search của tôi không có tác dụng?

Bởi vì đó là tên tham số của diễn viên ChatGPT. Cờ của DeepSeek là search, và các khóa không xác định được chấp nhận với 201 và bị loại bỏ mà không có lỗi. Điều tương tự cũng áp dụng cho thinking_enabled, search_enabled, và model — sử dụng chính xác thinkingsearch.

Q: Những trường nào là trống hoặc nullable?

model đã trở lại dưới dạng chuỗi rỗng trên mọi lần chạy được ghi lại cho hướng dẫn này, feedbackincomplete_messagenull trên các lần chạy hoàn thành, và references là trống trừ khi lần chạy đã sử dụng cả hai cờ. search_triggered vẫn false khi search không được yêu cầu. Đọc một cách phòng thủ và coi các trường vắng mặt là vắng mặt thay vì thất bại.

Q: Tôi có thể chạy điều này mà không cần SDK không?

Có. Đây là HTTP đơn giản — curl, Python requests, Node fetch, hoặc bất kỳ khách hàng nào có thể gửi một JSON POST và một GET với một tiêu đề.

Q: Có hợp pháp không khi bắt lấy câu trả lời của DeepSeek?

Diễn viên bắt giữ nội dung câu trả lời được tạo ra công khai, nhưng các quy định khác nhau tùy theo quyền tài phán và theo điều khoản dịch vụ của nền tảng. Xem xét các điều khoản áp dụng và tham khảo ý kiến luật sư cho trường hợp sử dụng của bạn, đặc biệt là trước khi phân phối lại các bản ghi, và không thu thập dữ liệu cá nhân được bảo vệ theo GDPR hoặc CCPA. Khi đường ống của bạn tiếp tục lấy các URL nguồn mà DeepSeek trích dẫn, hãy tôn trọng các chỉ thị thu thập tiêu chuẩn hóa bởi Giao thức loại trừ Robot trên mỗi trang web đó.

Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục