🎯 Trình duyệt đám mây tùy chỉnh, chống phát hiện được hỗ trợ bởi Chromium tự phát triển, thiết kế dành cho trình thu thập dữ liệu webtác nhân AI. 👉Dùng thử ngay
Quay lại blog

Theo dõi thương hiệu của bạn trên sáu động cơ trả lời AI với một quy trình duy nhất.

Daniel Kim
Daniel Kim

Lead Scraping Automation Engineer

10-Jun-2026

Những điểm chính:

  • Sáu công cụ trả lời AI, một pipeline. ChatGPT, Grok, Gemini, Perplexity, Copilot và Tổng quan AI của Google mỗi công cụ này đều trả lời các câu hỏi về mua sắm với các trích dẫn - và cả sáu đều có thể truy cập thông qua một điểm cuối, một x-api-token, và một phong bì { status, task_id, task_result }.
  • Các nền tảng chỉ khác nhau ở mức trường dữ liệu. Mỗi công cụ lưu trữ các trích dẫn của mình dưới một khóa khác nhau (content_references, web_search_results, citations, web_results, source); một bản đồ trường sáu dòng chuẩn hóa chúng thành một dòng trích dẫn thống nhất.
  • Chia sẻ trích dẫn là chỉ số đầu ra. Nhóm các trích dẫn đã được chuẩn hóa theo miền theo từng prompt và nền tảng, và số lượng theo thời gian chính là độ hiện diện AI của thương hiệu bạn.
  • Ba giai đoạn, ba kịch bản ngắn. Nắm bắt các câu trả lời, chuẩn hóa các trích dẫn, báo cáo số lượng - mỗi giai đoạn là một tệp Python có thể chạy mà bạn có thể lên lịch.
  • Ghim vào các biến có sự thay đổi. Quốc gia, chế độ lý luận của Grok, và tập hợp câu hỏi vẫn cố định theo mỗi series; các câu trả lời thay đổi từ lần chạy này sang lần khác, và sự biến thiên đó chính là tín hiệu mà bạn biểu đồ.
  • Miễn phí để bắt đầu. Các 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.

Tổng quan về Pipeline

Một người mua hỏi một trợ lý AI công cụ nào để chọn, và trợ lý liệt kê một ai đó - được hỗ trợ bởi một danh sách ngắn các nguồn đã được trích dẫn. Việc ai đó đó là bạn hay không phụ thuộc vào từng nền tảng: công cụ trích dẫn bạn có thể không phải là công cụ mà người mua của bạn sử dụng. Theo dõi một nền tảng cho bạn biết về nền tảng đó; bức tranh độ hiện diện chính là sự tổng hợp của cả sáu nền tảng bên cạnh nhau.

Pipeline dưới đây sản xuất bức tranh đó từ đầu đến cuối:

  1. Nắm bắt — chạy một prompt cố định trên cả sáu công cụ thông qua các diễn viên Scrapeless của chúng; lưu trữ các câu trả lời thô ở định dạng JSONL.
  2. Chuẩn hóa — ánh xạ trường trích dẫn của từng nền tảng vào một dòng {platform, prompt, domain, url, title} thống nhất.
  3. Báo cáo — đếm số trích dẫn theo miền trên từng nền tảng, và kiểm tra xem miền của bạn xuất hiện ở đâu.

Giai đoạn 1 là giai đoạn duy nhất chạm tới mạng lưới. Các giai đoạn 2 và 3 chỉ là chuyển đổi thuần túy, do đó việc phân tích lại là miễn phí. Để có kiến thức nền tảng về lý do tại sao các trích dẫn từ câu trả lời AI trở thành một chỉ số độ hiện diện, bài viết về GEO và độ hiện diện AI thương hiệu đưa ra các tiêu chí; hướng dẫn này xây dựng công cụ.


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

  • Một tài khoản Scrapeless và khóa API - đăng ký tại app.scrapeless.com.
  • Python 3.10+ với requests.
  • Một prompt cố định mà người mua của bạn có thể thực sự hỏi (ví dụ đã hoàn thành sử dụng một; các lần chạy sản xuất sử dụng một tập hợp).

Lưu trữ khóa của bạn trong môi trường để nó không bao giờ xuất hiện trong mã:

bash Copy
export SCRAPELESS_API_KEY=your_api_token_here

Giai đoạn 1 — Nắm bắt các câu trả lời

Một chức năng bao quát tất cả sáu công cụ, vì các diễn viên chia sẻ một điểm cuối và một phong bì. Các điểm khác nhau giữa từng công cụ chỉ giới hạn ở bản đồ đầu vào - Grok yêu cầu chế độ lý luận mode, Perplexity muốn cờ web_search, Copilot lấy chế độ riêng của nó:

Nền tảng Diễn viên Đầu vào thêm Trích dẫn sống trong
ChatGPT scraper.chatgpt content_references[]
Grok scraper.grok mode (bắt buộc) web_search_results[] + x_search_results[]
Gemini scraper.gemini citations[]
Perplexity scraper.perplexity web_search: true web_results[]
Copilot scraper.copilot mode: "smart" citations[]
Tổng quan AI của Google scraper.overview source[]
python Copy
# capture.py — chạy một prompt xuyên suốt sáu công cụ trả lời AI, lưu trữ các câu trả lời thô
import json
import os
import time

import requests

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

PROMPT = "API nào là tốt nhất cho việc thu thập dữ liệu web cho các trang web nặng JavaScript?"
COUNTRY = "US"

ENGINES = {
    "chatgpt": {"actor": "scraper.chatgpt", "extra": {}},
    "grok": {"actor": "scraper.grok", "extra": {"mode": "MODEL_MODE_FAST"}},
    "gemini": {"actor": "scraper.gemini", "extra": {}},
    "perplexity": {"actor": "scraper.perplexity", "extra": {"web_search": True}},
    "copilot": {"actor": "scraper.copilot", "extra": {"mode": "smart"}},
    "google-ai-overview": {"actor": "scraper.overview", "extra": {}},
}

with open("answers.jsonl", "w", encoding="utf-8") as out:
    for platform, spec in ENGINES.items():
        payload = {
            "actor": spec["actor"],
            "input": {"prompt": PROMPT, "country": COUNTRY, **spec["extra"]},
        }
        resp = requests.post(ENDPOINT, headers=HEADERS, json=payload, timeout=300)
        resp.raise_for_status()
        data = resp.json()
        out.write(json.dumps({
json Copy
"nền tảng": platform,
            "lời nhắc": PROMPT,
            "quốc gia": COUNTRY,
            "thời gian ghi nhận": int(time.time()),
            "trạng thái": data.get("status"),
            "id_nhiệm_vụ": data.get("task_id"),
            "kết_quả_nhiệm_vụ": data.get("task_result"),
        }) + "\n")
        print(f"{platform}: {data.get('status')}")

Mỗi dòng trong answers.jsonl là một bản ghi đầy đủ của một nền tảng — câu trả lời, trích dẫn, và metadata chạy — được khóa bằng task_id để theo dõi.

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


Giai đoạn 2 — Chuẩn hóa các trích dẫn

Bản đồ trường là toàn bộ mẹo: mỗi nền tảng đặt tên khác nhau cho mảng trích dẫn của mình và định hình các mục khác nhau, nhưng mỗi mục đều mang một URL. Sáu ánh xạ biến sáu lược đồ thành một luồng:

python Copy
# normalize.py — answers.jsonl -> citations.jsonl (mỗi hàng cho mỗi nguồn trích dẫn)
import json
from urllib.parse import urlparse

# nền tảng -> danh sách các cặp (mảng_field, url_key) trong task_result
CITATION_FIELDS = {
    "chatgpt": [("content_references", "url")],
    "grok": [("web_search_results", "url"), ("x_search_results", "url")],
    "gemini": [("citations", "url")],
    "perplexity": [("web_results", "url")],
    "copilot": [("citations", "url")],
    "google-ai-overview": [("source", "url")],
}

with open("answers.jsonl", encoding="utf-8") as inp, \
     open("citations.jsonl", "w", encoding="utf-8") as out:
    for line in inp:
        row = json.loads(line)
        result = row.get("task_result") or {}
        for field, url_key in CITATION_FIELDS[row["platform"]]:
            for entry in result.get(field) or []:
                url = entry.get(url_key) or ""
                if not url.startswith("http"):
                    continue
                out.write(json.dumps({
                    "nền tảng": row["platform"],
                    "lời nhắc": row["prompt"],
                    "quốc gia": row["country"],
                    "thời gian ghi nhận": row["captured_at"],
                    "bảng": field,
                    "miền": urlparse(url).netloc.removeprefix("www."),
                    "url": url,
                    "tiêu đề": entry.get("title") or entry.get("name") or "",
                }) + "\n")

print(sum(1 for _ in open("citations.jsonl", encoding="utf-8")), "trích dẫn đã được chuẩn hóa")

Grok đóng góp hai bảng — các trang web mở và các bài đăng X — và trường bảng giữ cho chúng có thể phân biệt được ở giai đoạn tiếp theo.


Giai đoạn 3 — Báo cáo tỷ lệ trích dẫn

Với một dòng trích dẫn, báo cáo là một nhóm theo. Theo từng nền tảng: các miền nào mà công cụ ghi nhận, và liệu của bạn có nằm trong số đó hay không:

python Copy
# report.py — citations.jsonl -> bảng tỷ lệ trích dẫn theo từng nền tảng
import json
import os
from collections import Counter, defaultdict

BRAND = os.environ.get("BRAND_DOMAIN", "scrapeless.com")

per_platform = defaultdict(Counter)
with open("citations.jsonl", encoding="utf-8") as inp:
    for line in inp:
        row = json.loads(line)
        per_platform[row["platform"]][row["domain"]] += 1

for platform, counts in per_platform.items():
    total = sum(counts.values())
    brand_hits = counts.get(BRAND, 0)
    print(f"\n{platform} — {total} trích dẫn · {BRAND}: {brand_hits}")
    for domain, n in counts.most_common(5):
        marker = " ←" if domain == BRAND else ""
        print(f"  {n:>3}  {domain}{marker}")

Chạy theo lịch, bảng này trở thành một chuỗi thời gian: theo từng nền tảng, theo từng lời nhắc, theo từng thị trường — số lượng câu trả lời trích dẫn bạn, và ai được trích dẫn thay vào đó. Chuỗi đó là tài liệu mà một chương trình GEO báo cáo.


Lên lịch và mở rộng chuỗi

  • Giữ các biến. Cùng một lời nhắc, cùng một quốc gia, cùng một chế độ Grok trong mỗi lần chạy — một chuỗi chỉ có thể đọc khi quá trình là nhất quán. Ghi lại hàng ngày hoặc hàng tuần; câu trả lời AI di chuyển trên cả hai khoảng thời gian.
  • Mở rộng bằng phép nhân, không phải mã mới. Nhiều lời nhắc là một vòng quanh Giai đoạn 1; nhiều thị trường là một COUNTRY thứ hai; cả hai đều làm tăng số lượng lần chạy, vì vậy hãy lập kế hoạch cho phù hợp — các diễn viên tính phí dựa trên mức sử dụng, với các cấp độ hiện tại trên trang bảng giá.
  • Giữ các bản ghi ban đầu. answers.jsonl là bằng chứng đứng sau mỗi số trong báo cáo; các tùy chọn chuẩn hóa có thể thay đổi, nhưng các câu trả lời gốc thì không.
  • Mong đợi các bảng trống. Một số lời nhắc không tạo ra trích dẫn trên một số công cụ (bảng X của Grok đặc biệt phụ thuộc vào lời nhắc). Một mảng trống là một điểm dữ liệu, không phải một thất bại.
    Các diễn viên sống trong dòng Universal Scraping API; hướng dẫn các trình trích xuất LLM tốt nhất xếp hạng danh mục nếu bạn đang so sánh công cụ.

Câu hỏi thường gặp

H: Có hợp pháp để thu thập câu trả lời AI theo cách này không?

Các diễn viên thu thập nội dung câu trả lời được công khai. Quy định thay đổi tùy theo khu vực pháp lý và điều khoản của từng nền tảng — xem xét các Điều khoản dịch vụ liên quan và tham khảo luật sư cho trường hợp sử dụng của bạn. Không bao giờ thu thập dữ liệu cá nhân được bảo vệ theo GDPR hoặc CCPA.

H: Tại sao chỉ một câu lệnh trong ví dụ thay vì một tập hợp?

Để rõ ràng. Các phiên sản xuất chạy một tập hợp câu lệnh xung quanh Giai đoạn 1; mọi thứ tiếp theo đã xử lý nhiều câu lệnh vì mỗi hàng mang theo prompt của riêng nó.

H: Bao nhiêu lần chạy thì tạo thành một chuỗi có thể sử dụng?

Việc thu thập đơn lẻ từ một bề mặt không định nghĩa không chứng minh được nhiều điều. Các lần thu thập hàng ngày trong hai đến ba tuần cung cấp đủ điểm để tách xu hướng khỏi tiếng ồn trên hầu hết các tập hợp câu lệnh.

H: Còn tab Chế độ AI của Google thì sao?

Nó có diễn viên riêng (scraper.aimode) dưới cùng một phong bì — thêm một mục thứ bảy vào bản đồ động cơ. Hướng dẫn Tổng quan về AI đề cập đến bề mặt câu trả lời của Google một cách sâu sắc.

H: Tôi có cần một proxy không?

Không. Truy cập dân cư và định tuyến địa lý được tích hợp vào các diễn viên; đầu vào country là toàn bộ cấu hình.

H: Liệu điều này có hoạt động mà không cần tác nhân AI hoặc SDK không?

Có — ba giai đoạn là Python thuần túy qua HTTP. Bất kỳ trình lập lịch nào (cron, CI, trình chạy quy trình) cũng có thể điều khiển chúng.


Kết luận: một phong bì, sáu động cơ, một số

Đường ống giảm xuống ba tệp: thu thập câu trả lời qua sáu diễn viên chia sẻ một điểm cuối và một phong bì, chuẩn hóa sáu sơ đồ trích dẫn với bản đồ trường sáu dòng, và đếm miền. Đầu ra là số mà công việc nhìn thấy thời đại AI còn thiếu — tần suất mỗi động cơ câu trả lời ghi nhận bạn, được theo dõi theo thời gian, theo thị trường. Lên lịch cho nó và biểu đồ tự vẽ lên.

Sẵn sàng để xây dựng Đường ống Dữ liệu Câu trả lời AI của bạn?

Tham gia cộng đồng của chúng tôi để nhận kế hoạch miễn phí và kết nối 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 thử nghiệm miễn phí, và chỉ đường ống vào các câu lệnh, động cơ và thị trường mà thương hiệu của bạn trả lời.

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