Một tác nhân theo dõi giá là một quy trình nhỏ: đọc các URL sản phẩm đã được phê duyệt, phân tích một trường giá cụ thể, lưu trữ các quan sát, so sánh với lịch sử và cảnh báo về những thay đổi có ý nghĩa.
Nstdata Crawl xử lý việc truy xuất trang và có thể trả về Markdown hoặc HTML. Ứng dụng của bạn phải thực hiện việc đối sánh sản phẩm, phân tích giá, lập lịch, lưu trữ và thông báo.
Từ chối các giá thiếu, thay đổi tiền tệ và biến thể không khớp trước khi so sánh giá trị. Giữ lại URL gốc và thời gian cho mỗi quan sát.
Ví dụ có thể chạy sử dụng một dấu hiệu văn bản cụ thể cho trang và SQLite nên các giới hạn của nó là rõ ràng; điều chỉnh bộ phân tích cho thực tế đánh dấu của từng trang mục tiêu.
Giả sử một nhóm bán lẻ muốn biết khi nào một trang sản phẩm công khai thay đổi giá. Một cron job tải HTML có thể hoạt động trên một trang tĩnh, nhưng một trình giám sát sản xuất cũng cần kết xuất, kiểm tra trích xuất, lịch sử, loại bỏ trùng lặp và chính sách cảnh báo. Nstdata Crawl có thể cung cấp nội dung trang; các quyết định giám sát thuộc về ứng dụng. Hướng dẫn này sử dụng dữ liệu sản phẩm minh họa và không đưa ra tuyên bố nào về giá cạnh tranh trực tiếp.
Tác Nhân Theo Dõi Giá Là Gì?
Một tác nhân theo dõi giá biến các quan sát thành một quyết định nhỏ: “Liệu sản phẩm giống nhau, trong cùng một loại tiền tệ và biến thể, đã chuyển động đủ để thông báo cho người xem?” Nó khác với một kịch bản quét cơ bản bằng cách duy trì trạng thái, áp dụng các quy tắc xác thực và giải thích các cảnh báo của nó. Nó không thể suy ra ý định thương mại của một đối thủ từ việc thay đổi giá. Một giá trị hiển thị thấp hơn có thể là một chương trình khuyến mãi, một biến thể thay thế, một đề nghị theo khu vực, hoặc một lỗi phân tích.
Đối với mỗi sản phẩm, định nghĩa một product_id ổn định, tên hoặc SKU mong đợi, URL gốc, tiền tệ, và khoảng thời gian kiểm tra. Không hợp nhất lặng lẽ các biến thể sản phẩm. Nếu trang mục tiêu cung cấp một nguồn cấp dữ liệu được cấp phép hoặc API chính thức cung cấp dữ liệu bạn cần, hãy đánh giá con đường đó trước.
Trải nghiệm Nstproxy Crawl - Bắt Đầu Dùng Thử Miễn Phí Hôm Nay
Quy trình là URL sản phẩm → Crawl API → trích xuất giá → xác thực → lịch sử SQLite → phát hiện thay đổi → cảnh báo. Trình thu thập thông tin đọc một trang. Bộ phân tích xác định giá dự kiến. Cơ sở dữ liệu lưu trữ các quan sát. Bước so sánh áp dụng các ngưỡng kinh doanh. Một trình lập lịch chạy quy trình làm việc, và một dịch vụ thông báo gửi cảnh báo. Mỗi giai đoạn nên có trạng thái lỗi riêng của nó.
Crawl API và Thu Thập Dữ Liệu Web
Đối với một URL sản phẩm công khai đã biết, yêu cầu Markdown nội dung chính. Nếu giá mục tiêu được nhúng trong một phần tử có cấu trúc hoặc một thành phần hình ảnh, yêu cầu HTML hoặc một ảnh chụp màn hình để chẩn đoán. Tài liệu Crawl của Nstdata mô tả Markdown, HTML, ảnh chụp màn hình, kết xuất, và thời gian chờ trang. Việc lấy một trang không có nghĩa là trường giá chính xác đã được trích xuất; xây dựng một bộ phân tích riêng và xác thực đầu ra của nó.
Ghi lại số tiền quan sát được dưới dạng số thập phân, không phải là số dấu phẩy động. Giữ lại tiền tệ, danh tính sản phẩm, URL, và thời gian quan sát UTC. Một trang sản phẩm có thể hiện giá danh sách, giá bán, giá đăng ký, giá đơn vị, và giá biến thể đồng thời. Chọn trường mà bạn dự định theo dõi và ghi lại lựa chọn đó. Cũng lưu lại các lần trích xuất thất bại, để một giá thiếu không giả danh là “không có thay đổi.”
Quyết Định và Cảnh Báo của Tác Nhân
Tính toán thay đổi tuyệt đối và phần trăm so với lần quan sát hợp lệ cuối cùng của cùng một sản phẩm và tiền tệ. Thêm một ngưỡng tối thiểu và ngăn chặn các cảnh báo trùng lặp cho cùng một quan sát. Việc xem xét của con người là hữu ích cho các thay đổi lớn hoặc khi một bộ phân tích đã thay đổi gần đây. Một mô hình ngôn ngữ có thể viết một tóm tắt cảnh báo dễ đọc, nhưng không nên quyết định thay đổi số từ văn bản chưa được xác minh.
Các Bước: Xây Dựng Một Tác Nhân Theo Dõi Giá Với Python
Bước 1: Thiết Lập Dự Án và Danh Sách URL Sản Phẩm
Sử dụng Python 3.10+ và pip install nstdata-ai-crawl. Đặt NSTDATA_API_TOKEN như một biến môi trường. Thay thế https://shop.example.com/products/widget bằng một trang sản phẩm mà bạn được phép theo dõi. Dấu hiệu Price: USD 129.00 trong mẫu là một công cụ thử nghiệm, không phải là quy tắc toàn cầu cho các cửa hàng. Thời gian chạy cần một tài khoản Nstdata có sẵn; cuộc gọi trực tiếp không được thực hiện ở đây.
Bước 2: Lấy Trang Sản Phẩm Với Nstdata Crawl
Mã yêu cầu Markdown với onlyMainContent=True và kiểm tra kết quả rỗng. Kết xuất JavaScript có thể giúp các trang mà chi tiết sản phẩm được cung cấp ở phía máy khách, nhưng bạn vẫn cần xác minh rằng phần tử giá đã chọn xuất hiện trong nội dung trả về.
Ví dụ: Thu Thập Một Trang Sản Phẩm
fetch_markdown() bên dưới là ranh giới SDK. Nó trả về văn bản cho một trình phân tích; nó không tuyên bố rằng API đã xác định giá sản phẩm.
Bước 3: Trích xuất và Chuẩn hóa Giá
Trình phân tích so khớp một dấu hiệu rõ ràng và tiền tệ mong đợi. Đối với một trang web mục tiêu thực sự, hãy sử dụng bộ chọn HTML cụ thể cho trang hoặc trường dữ liệu có cấu trúc đã được tài liệu hóa, được hỗ trợ bởi các mẫu giá bán, sản phẩm không có sẵn, và nhiều biến thể. Không bao giờ lấy số giống như tiền tệ đầu tiên trên một trang và gọi nó là “giá cả”.
Bước 4: Lưu Lịch sử Giá trong SQLite
Lưu cả quan sát hợp lệ và bị từ chối. SQLite thích hợp cho một hướng dẫn một quá trình và khối lượng công việc khiêm tốn; một trình giám sát lớn hơn có thể cần một cơ sở dữ liệu máy chủ giao dịch và một hàng đợi công nhân. Bảng bao gồm product_id, observed_price, currency, observed_at, source_url, và extraction_status.
Bước 5: Phát hiện Thay đổi Giá Có Ý Nghĩa
Đối với giá cũ P₀ và giá mới P₁, thay đổi tuyệt đối là P₁ − P₀; thay đổi phần trăm là (P₁ − P₀) / P₀ × 100. Không tính toán thay đổi phần trăm khi giá trị cơ bản bằng không. Chỉ so sánh các giá trị có cùng tiền tệ và biến thể sản phẩm. Ví dụ cảnh báo khi có thay đổi tuyệt đối ít nhất 5 đơn vị tiền tệ và thay đổi tương đối ít nhất 3%; điều chỉnh cả hai ngưỡng cho doanh nghiệp của bạn.
Bước 6: Lập Lịch Kiểm Tra và Tạo Cảnh Báo
Chạy kịch bản từ cron, một lập lịch công nhân, hoặc hệ thống điều phối của bạn. Ví dụ này in ra một cảnh báo mà một dịch vụ xung quanh có thể gửi. Lập lịch và thông báo không phải là các tính năng của Crawl API. Ghi lại lỗi thu thập dữ liệu một cách riêng biệt và thử lại các lỗi tạm thời với một lùi lại có giới hạn.
import os
import re
import sqlite3
from datetime import datetime, timezone
from decimal import Decimal, InvalidOperation
from nstdata_ai_crawl import Format, NstDataClient, ScrapeRequestDto
DB_PATH ="prices.sqlite3"PRODUCTS =[{"product_id":"widget-standard","product_name":"Widget Standard","source_url":"https://shop.example.com/products/widget","currency":"USD",}]deffetch_markdown(client: NstDataClient, url:str)->str: result = client.submit_scrape_task_sync( ScrapeRequestDto( url=url, formats=[Format.MARKDOWN], onlyMainContent=True, timeout=60000,)) body = result.data.get_markdown()ifnot body ornot body.strip():raise ValueError("No usable product page content")return body
defparse_price(markdown:str, currency:str)-> Decimal:# Replace this target-specific marker with a tested parser for your site. pattern =rf"(?m)^Price:\s*{re.escape(currency)}\s+([0-9]+(?:\.[0-9]{{2}})?)\s*$" matches = re.findall(pattern, markdown)iflen(matches)!=1:raise ValueError(f"Expected one {currency} price marker, found {len(matches)}")try: amount = Decimal(matches[0])except InvalidOperation as exc:raise ValueError("Invalid decimal price")from exc
if amount <=0:raise ValueError("Price must be positive")return amount
definit_db(db: sqlite3.Connection)->None: db.execute("""
CREATE TABLE IF NOT EXISTS observations (
id INTEGER PRIMARY KEY,
product_id TEXT NOT NULL,
observed_price TEXT,
currency TEXT NOT NULL,
observed_at TEXT NOT NULL,
source_url TEXT NOT NULL,
extraction_status TEXT NOT NULL
)
""") db.commit()defprevious_price(db: sqlite3.Connection, product_id:str, currency:str): row = db.execute("""SELECT observed_price FROM observations
WHERE product_id = ? AND currency = ? AND extraction_status = 'ok'
ORDER BY id DESC LIMIT 1""",(product_id, currency),).fetchone()return Decimal(row[0])if row elseNonedefsave(db, product, observed_at, status, price=None): db.execute("""INSERT INTO observations
(product_id, observed_price, currency, observed_at, source_url, extraction_status)
VALUES (?, ?, ?, ?, ?, ?)""",( product["product_id"],str(price)if price isnotNoneelseNone, product["currency"], observed_at, product["source_url"], status,),) db.commit()defmain()->None:with sqlite3.connect(DB_PATH)as db: init_db(db)with NstDataClient(os.environ["NSTDATA_API_TOKEN"])as client:for product in PRODUCTS: observed_at = datetime.now(timezone.utc).isoformat()try: markdown = fetch_markdown(client, product["source_url"]) price = parse_price(markdown, product["currency"]) baseline = previous_price( db, product["product_id"], product["currency"])save(db, product, observed_at,"ok", price)if baseline isNone:print(f"Baseline recorded: {product['product_id']}{price}")continue delta = price - baseline
pct =abs(delta / baseline)*100if baseline else Decimal("0")ifabs(delta)>= Decimal("5")and pct >= Decimal("3"):print(f"ALERT {product['product_id']}: {baseline} -> {price} "f"{product['currency']} ({pct:.2f}%); "f"source={product['source_url']} at={observed_at}")except Exception as exc: save(db, product, observed_at,"error")print(f"ERROR {product['product_id']}: {exc}")if __name__ =="__main__": main()
Đối với một phép phân tích cục bộ trước bất kỳ cuộc gọi mạng nào, parse_price("Price: USD 129.00", "USD") nên trả về Decimal("129.00"). Nó nên từ chối "List price: USD 129.00" và một trang có hai dấu Price:. Một bộ phân tích sản xuất cần các dụng cụ bổ sung cho giảm giá, ký hiệu tiền tệ, dấu phân cách đặc trưng theo địa phương, và văn bản hết hàng. Một mục crontab như 0 */6 * * * /path/to/python /path/to/price_watch.py >> /path/to/price_watch.log 2>&1 chạy mỗi sáu giờ; đặt tần suất để phù hợp với quyền, ngân sách và nhu cầu tươi sống của bạn.
Tại sao sử dụng Nstdata Crawl để theo dõi giá?
Nstdata hữu ích như lớp thu thập khi các trang sản phẩm công cộng đã được phê duyệt cần render, truy xuất lặp lại và đầu ra nhất quán. API một trang đã được tài liệu, đầu ra Markdown và HTML, ảnh chụp màn hình, tác vụ đồng bộ và không đồng bộ, và các tùy chọn vùng proxy có thể giảm mã truy cập trang mà bạn duy trì. Những khả năng đó không trích xuất giá một cách đáng tin cậy qua mọi cửa hàng. Bộ phân tích, cơ sở dữ liệu, lập lịch và giao hàng cảnh báo vẫn là trách nhiệm của bạn. Hướng dẫn thu thập dữ liệu tự động của Nstdata cung cấp ngữ cảnh hoạt động liên quan.
Sự phân tách cho phép bạn thay thế bộ phân tích trang mà không cần thay đổi khách hàng thu thập của bạn. Markdown rất thuận tiện khi giá hiển thị dưới dạng văn bản; HTML thì ưa chuộng hơn khi bạn cần một trường dữ liệu có cấu trúc chính xác hoặc DOM. Ảnh chụp màn hình có thể giúp chẩn đoán sự không khớp về mặt hình ảnh. Cài đặt khu vực proxy có thể quan trọng khi tiền tệ hoặc ưu đãi hiển thị khác nhau theo địa điểm, nhưng biến thể địa lý phải được ghi lại như một phần của chìa khóa quan sát thay vì được xem như là một sự thay đổi giá.
Ví dụ tích hợp SDK Python
fetch_markdown() ở trên là bộ chuyển đổi SDK nhỏ. Đối với một thương nhân mới, trước tiên thu thập một số trang mẫu được phép và viết các bài kiểm tra trích xuất riêng cho từng trang. Chỉ sau đó hãy bật kiểm tra theo lịch. Tránh quảng bá một chỉ số “trang đã lấy” thành một chỉ số “giá đã quan sát thành công”.
Kiểm tra, Chi phí và Các Vấn đề Thường Gặp
Theo dõi chi phí yêu cầu Crawl, lưu lượng proxy được tính phí riêng, chi phí cơ sở dữ liệu và lập lịch, và mã mô hình nếu một LLM viết tóm tắt. Mẫu số hữu ích là các quan sát giá hợp lệ, khớp đúng, không phải là yêu cầu thô. Nếu số lần thử lại gia tăng hoặc việc trích xuất thất bại sau khi thay đổi cấu trúc, chi phí cho mỗi quan sát hợp lệ sẽ tăng ngay cả khi giá mỗi yêu cầu vẫn cố định.
Các Lỗi Thường Gặp và Khắc Phục
Đối với nội dung trống, kiểm tra trạng thái đã render của trang và bộ chọn mong đợi. Đối với 403/429, giảm tốc độ và xem lại chính sách truy cập thay vì thử lại một cách mạnh mẽ. Đối với một bước nhảy giá không hợp lý, kiểm tra khuyến mại, biến thể, kích thước gói, tiền tệ và thay đổi bộ phân tích. Sử dụng một chìa khóa quan sát hoặc cảnh báo duy nhất nếu một trình lập lịch có thể chạy hai lần, và đảm bảo một hàng lỗi không bao giờ ghi đè lên mức cơ sở hợp lệ cuối cùng.
Cách Đo Chất Lượng Giám Sát
Đánh dấu một mẫu các trang mục tiêu bằng tay. Độ chính xác trích xuất là số lần phân tích giá chính xác / số trang đã phân tích. Tỷ lệ thu thập hợp lệ là số quan sát được chấp nhận / số trang đã thử. Độ chính xác phát hiện thay đổi là thay đổi đúng / cảnh báo đã được xem xét. Độ tươi là thời gian từ khi thay đổi trang đến khi quan sát được ghi nhận; đo nó với các dụng cụ kiểm soát hoặc các sự kiện cập nhật đã biết. Tỷ lệ cảnh báo trùng lặp là các cảnh báo lặp lại cho cùng một thay đổi quan sát được / tất cả các cảnh báo. Xem xét những điều này theo thương nhân và mẫu trang vì một trung bình toàn cầu có thể ẩn giấu một bộ phân tích bị lỗi.
Làm thế nào để tôi xây dựng một tác nhân giám sát giá?
Đọc các trang sản phẩm được phép, trích xuất một giá đã được xác định rõ, lưu trữ các quan sát có đánh dấu thời gian, so sánh với bản ghi phù hợp hợp lệ cuối cùng, và chỉ cảnh báo sau khi xác thực.
Liệu một API Crawl có thể tự động trích xuất giá không?
Một API Crawl thu thập nội dung trang. Bạn vẫn cần một trình phân tích cú pháp hoặc lớp trích xuất theo trang web cụ thể để xác định giá và biến thể sản phẩm đúng.
Giá nên được kiểm tra bao lâu một lần?
Chọn một lịch trình dựa trên yêu cầu mới mẻ của doanh nghiệp, chính sách trang web, tần suất thay đổi và chi phí. Đo lường xem khoảng thời gian đó có bắt kịp các thay đổi kịp thời hay không.
Nên lưu trữ giá sản phẩm lịch sử như thế nào?
Sử dụng một ID sản phẩm ổn định, số tiền thập phân, tiền tệ, URL nguồn, thời gian quan sát, trạng thái trích xuất, và bất kỳ khóa biến thể hoặc khu vực nào cần thiết để so sánh cùng một loại với nhau.
Ivy Lin
Oct. 22nd 2026
Thu thập toàn bộ trang web chỉ với một yêu cầu API
Chuyển mọi trang web thành Markdown, HTML, JSON, liên kết, PDF và hơn thế nữa mà không cần quản lý hạ tầng thu thập dữ liệu.
Tỷ lệ thành công 99,8% với kết xuất JavaScript
Nhận dữ liệu sạch, sẵn sàng cho LLM ở nhiều định dạng