🎯 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

Cách tạo thông báo giảm giá trong Python: Giám sát thời gian thực với trình duyệt thu thập dữ liệu không rác.

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

01-Jun-2026

Những điểm chính:

  • Kết xuất trước, rồi mới đọc giá. Giá bán lẻ hiện đại được vẽ trên phía khách hàng sau khi JavaScript chạy và được cá nhân hóa theo khu vực. Một trang được kết xuất thực sự - không phải là một tìm nạp HTTP thô - là những gì trả về con số mà một người mua thực sự thấy. Trình Duyệt Scraping Không Có Rác kết xuất trang sản phẩm trong một trình duyệt đám mây chống phát hiện và trả lại DOM đã được điền.
  • Gắn quốc gia proxy, vì giá theo địa lý. Giá cả, tiền tệ và tính khả dụng thay đổi theo khu vực và theo danh tiếng IP. Cài đặt proxy_country="US" (hoặc bất kỳ thị trường nào mà cảnh báo theo dõi) giữ cho mọi kiểm tra ở cùng một lối ra để lịch sử giá so sánh giống như nhau.
  • Lịch sử giá chỉ là một nhật ký chỉ thêm. Mỗi lần kiểm tra ghi một bản ghi {sản phẩm, url, giá, tiền tệ, checked_at}. Logic cảnh báo là một so sánh đơn giản: giá mới nhất có thấp hơn giá thấp trước đó không? Đó là toàn bộ quyết định.
  • Một cú giảm kích hoạt webhook. Khi so sánh cho biết "thấp hơn," một dòng lệnh requests.post đến một điểm cuối Slack/Discord/email-relay gửi cảnh báo. Không có hàng đợi, không có môi giới - chỉ một cuộc gọi HTTP.
  • Lên lịch và rời đi. Một mục cron, một tác vụ định kỳ, hoặc một bộ đếm không máy chủ chạy kiểm tra theo nhịp. Vòng lặp kết xuất → trích xuất → so sánh → cảnh báo đủ nhỏ để chạy không cần giám sát.
  • Hoạt động trên hầu hết các trang sản phẩm công khai. Vòng lặp tương tự áp dụng cho gần như bất kỳ trang sản phẩm nào kết xuất giá trong DOM — gắn lối ra, neo vào một nút giá ổn định và tái sử dụng so sánh.
  • Miễn phí để bắt đầu. Tài khoản Scrapeless mới bao gồm thời gian chạy Trình Duyệt Scraping miễn phí - đăng ký tại website Scrapeless.

Giới thiệu: ngừng làm mới trang sản phẩm một cách thủ công

Theo dõi giá là một trong những lý do phổ biến nhất khiến mọi người quét web công khai. Những người săn lùng giao dịch muốn mua ở mức thấp nhất. Các đội ngũ giá cả muốn biết ngay khi một đối thủ giảm giá SKU. Bộ phận mua sắm muốn được thông báo trước khi hàng được bổ sung. Công việc luôn có cùng một hình dạng: theo dõi một trang sản phẩm, nhận biết khi con số giảm, và thông báo cho ai đó.

Sự ma sát là một trang sản phẩm không còn là một tài liệu tĩnh. Các danh mục bán lẻ được tải lên phía khách hàng: trang đến dưới dạng một vỏ mỏng, và giá cả, tiền tệ, cờ giảm giá và tính khả dụng được vẽ vào sau khi JavaScript chạy. Một yêu cầu HTTP thông thường trả về vỏ, không phải là giá. Con số cũng theo vùng - cùng một URL có thể hiển thị giá khác nhau, tiền tệ khác nhau, hoặc trạng thái hàng tồn kho phụ thuộc vào IP lối ra - và nhiều trang web chặn các yêu cầu tự động bằng các kiểm tra chống bot trả về một trang thách thức dưới trạng thái HTTP 200. Một máy kiểm tra thuần HTTP "hoạt động" trong thử nghiệm có thể bắt đầu ghi lại các trang thách thức thay vì giá.

Bài viết này sẽ hướng dẫn một quy trình làm việc Python trên Trình Duyệt Scraping Không Có Rác khép kín những khoảng cách đó từ đầu đến cuối: kết xuất trang sản phẩm trong một trình duyệt đám mây chống phát hiện trên một lối ra nhà ở, trích xuất giá từ DOM đã được kết xuất, thêm vào một kho lưu trữ lịch sử giá nhỏ, so sánh giá trị mới nhất với giá thấp trước đó, và kích hoạt webhook khi giá giảm. Một bộ lập lịch chạy vòng lặp theo nhịp. Cùng một nguyên tắc kết xuất cung cấp sức mạnh cho các so sánh công cụ cho giá bán lẻ khu vực hóa như Các Trình Quét Zillow Tốt Nhất năm 2026.


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

  • Cảnh báo giao dịch cá nhân. Theo dõi một danh sách mong muốn các sản phẩm và nhận thông báo ngay khi bất kỳ sản phẩm nào trong số đó giảm xuống dưới mức giá mục tiêu.
  • Giám sát giá cả cạnh tranh. Các đội ngũ giá theo dõi các SKU đối thủ theo chu kỳ liên tục và phản ứng với các cắt giảm trong vài phút thay vì vài ngày.
  • Theo dõi restock và tính khả dụng. Kết hợp việc đọc giá với việc đọc tính khả dụng để cảnh báo cả hai "trở lại trong kho" và "giờ đây rẻ hơn".
  • Phát hiện drift kiểu MAP. Các chủ sở hữu thương hiệu đánh dấu khi danh sách theo dõi giảm xuống dưới mức sàn mong đợi qua các vùng.
  • Thời gian mua cho bộ phận mua sắm. Ghi lại lịch sử giá trong vài tuần để phát hiện nhịp điệu của các chương trình giảm giá của một sản phẩm trước khi thực hiện đơn hàng mua.
  • Dữ liệu lịch sử giá. Nhật ký chỉ thêm cũng đóng vai trò như một chuỗi thời gian sạch cho biểu đồ, phân tích xu hướng, hoặc đầu vào mô hình.

Tại Scrapeless, chúng tôi chỉ truy cập dữ liệu sẵn có công khai trong khi hoàn toàn tuân thủ các luật, quy định và chính sách quyền riêng tư của trang web hiện hành. Nội dung trong bài viết này chỉ nhằm mục đích minh họa.


Tại sao Trình Duyệt Scraping Không Có Rác

Trình Duyệt Scraping Không Có Rác là một trình duyệt đám mây tùy chỉnh, chống phát hiện, được thiết kế cho các trình thu thập dữ liệu web và tác nhân AI. Đối với một cảnh báo giảm giá cụ thể, nó mang lại:

  • Proxy nhà ở ở hơn 195 quốc gia, để cảnh báo có thể gắn lối ra của nó vào thị trường mà nó theo dõi - giá cả, tiền tệ và tính khả dụng theo địa lý, và một proxy_country cố định giữ cho mọi kiểm tra có thể so sánh được.
  • Kết xuất JavaScript phía đám mây, để giá cả, cờ giảm giá, ký hiệu tiền tệ và trạng thái hàng tồn kho đến được điền trong DOM thay vì dưới dạng một shell React rỗng.
  • Chống phát hiện dấu vân tay trong mỗi phiên, vì vậy trang sản phẩm sẽ hiển thị cùng một trải nghiệm như lưu lượng truy cập tự nhiên — bao gồm bảng giá thực thay vì trang thách thức được phục vụ dưới trạng thái HTTP 200.
  • Giữ nguyên phiên trong quá trình điều hướng, vì vậy một kiểm tra làm nóng trang chủ trước khi đến trang sản phẩm giữ cho cookie và trạng thái nhất quán trong một lần chạy.
  • Một điểm cuối CDP sạch mà Puppeteer hoặc Playwright điều khiển trực tiếp — kết nối qua CDP và trình duyệt đám mây sẽ làm phần còn lại.

Nhận khóa API của bạn trên gói miễn phí tại app.scrapeless.com. Trang sản phẩm Trình duyệt Scraping đề cập đến thời gian chạy, và Giải pháp Proxy đề cập đến lối ra dân dụng hỗ trợ cho nó.


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

  • Python 3.10 hoặc phiên bản mới hơn.
  • Tài khoản Scrapeless và khóa API — đăng ký tại trang web Scrapeless. SDK sẽ đọc từ biến môi trường SCRAPELESS_API_KEY.
  • Playwright cho Python, điều khiển trình duyệt đám mây qua CDP. Thông tin kết nối và hướng dẫn thư viện tại docs.scrapeless.com.
  • Kiến thức cơ bản về terminal và một URL webhook để nhận cảnh báo (Slack, Discord hoặc bất kỳ dịch vụ email nào).

Cài đặt

Cài đặt Playwright để điều khiển trình duyệt đám mây qua CDP, và requests cho cuộc gọi webhook:

bash Copy
pip install playwright requests

Đặt khóa API của bạn để nó có thể sử dụng URL kết nối:

bash Copy
export SCRAPELESS_API_KEY=your_api_token_here

Đó là toàn bộ cấu hình. connect_over_cdp của Playwright kết nối đến điểm cuối Trình duyệt Scraping của Scrapeless và điều khiển một trình duyệt thực hoạt động trong đám mây Scrapeless — không cần tải xuống Chromium tại địa phương, vì việc kết xuất xảy ra ở phía đám mây.


Bước 1 — Xây dựng URL kết nối trình duyệt đám mây

Trình duyệt Scraping của Scrapeless là một điểm cuối CDP. Xây dựng URL WebSocket với khóa API của bạn làm token và thị trường lối ra làm proxyCountry; Playwright kết nối trực tiếp với nó.

python Copy
import os
from urllib.parse import urlencode
from playwright.sync_api import sync_playwright

def scraping_browser_url(proxy_country: str = "US", session_ttl: int = 240) -> str:
    # Khóa API đi kèm với URL dưới dạng `token`; lối ra và thời gian tồn tại là các tham số truy vấn.
    params = urlencode({
        "token": os.environ["SCRAPELESS_API_KEY"],
        "sessionTTL": session_ttl,
        "proxyCountry": proxy_country,
    })
    return f"wss://browser.scrapeless.com/api/v2/browser?{params}"

proxyCountry là cờ tải trọng cho việc theo dõi giá: cùng một URL sản phẩm có thể hiển thị giá khác nhau, tiền tệ khác nhau hoặc trạng thái sẵn có khác nhau theo khu vực, vì vậy việc chỉ định lối ra giữ cho mọi giá đã ghi nhận ở cùng một thị trường. sessionTTL là thời gian tồn tại của phiên tính bằng giây — giữ đủ lâu để kết xuất trang và đọc giá.


Bước 2 — Kết xuất trang sản phẩm và đọc giá

Kết nối khách hàng CDP với phiên, kết xuất trang sản phẩm, và trích xuất giá từ DOM đã được lấp đầy. Một kết xuất trực tiếp của URL tìm kiếm Walmart qua một phiên Scrapeless dân cư của Mỹ trả về HTTP 200 với bảng sản phẩm thực — tiêu đề sẽ chuyển thành laptop - Walmart.com và trang sẽ hiển thị các liên kết sản phẩm theo dạng https://www.walmart.com/ip/<slug>/<id>. Những trang /ip/ đó là các mục tiêu theo sản phẩm mà một theo dõi giá đọc. Ví dụ dưới đây theo dõi một trang sản phẩm như vậy.

URL sản phẩm được kết xuất trực tiếp. Như một biện pháp phòng ngừa cho các trang yêu cầu một cuộc gọi lạnh đến một URL sâu đằng sau một kiểm tra chống bot, ví dụ này sẽ làm nóng phiên trên trang chính của trang trước, sau đó điều hướng đến URL sản phẩm trong cùng một phiên — vô hại khi không cần thiết, và hữu ích khi cần.

python Copy
PRODUCT = "Laptop 15 inch Ví dụ"
URL = "https://www.walmart.com/ip/example-15-inch-laptop/123456789"

def read_price(url: str) -> dict:
    # Điều khiển Trình duyệt Scraping của Scrapeless qua CDP với Playwright.
    with sync_playwright() as p:
        browser = p.chromium.connect_over_cdp(scraping_browser_url("US"))
        page = browser.new_page()

        # Làm nóng phiên trên trang chính trước, sau đó đến trang sản phẩm
        # để bảng giá được kết xuất.
        page.goto("https://www.walmart.com/", wait_until="domcontentloaded")
        page.wait_for_timeout(2500)
        page.goto(url, wait_until="domcontentloaded")
        page.wait_for_timeout(3000)   # cho phép nút giá hấp thụ

        # Ghim vào một nút giá ổn định. Các nhà bán lẻ thay đổi tên lớp đã mã hóa,
        # vì vậy ưu tiên các điểm ghim ngữ nghĩa (itemprop, data-testid, aria-label).
        price_node = page.query_selector('[itemprop="price"], [data-testid="price-wrap"]')
        price_text = price_node.inner_text() if price_node else ""
        browser.close()

    # Chuẩn hóa "$1,299.00" -> 1299.0

digits = "".join(ch for ch in price_text if ch.isdigit() or ch == ".")
price = float(digits) if digits else None
return {"product": PRODUCT, "url": url, "price": price, "currency": "USD"}


Kết quả trả về của render giống như lưu lượng truy cập hữu cơ thấy trên DOM, do đó nút giá mang số đúng trong thời gian thực và chính xác theo khu vực. Gắn vào một bộ chọn ngữ nghĩa (itemprop, data-testid, aria-label) thay vì tên lớp đã băm — các tên lớp thay đổi qua các lần triển khai, nhưng các bộ chọn ngữ nghĩa thì không. Nếu một trang chia tách đô la và xu thành các nút riêng biệt, hãy đọc cả hai và nối chúng trước khi chuẩn hóa.

Nhận khóa API của bạn trên gói miễn phí: Trang web Scrapeless


Bước 3 — Lưu trữ lịch sử giá

Lịch sử giá là một nhật ký chỉ thêm. Mỗi lần kiểm tra ghi một bản ghi; tệp là nguồn sự thật cho phép so sánh trong Bước 4. Một tệp JSON chia dòng (JSONL) giữ cho nó chỉ thêm và dễ dàng đọc lại:

python Copy
import json
from datetime import datetime, timezone

HISTORY_FILE = "price_history.jsonl"

def append_history(record: dict) -> dict:
    record = {
        **record,
        # Một dấu thời gian UTC có thể đọc được; hoán đổi cho một thời gian epoch Unix nếu cần một loạt thời gian nghiêm ngặt.
        "checked_at": datetime.now(timezone.utc).strftime("%d-%b-%Y %H:%M UTC"),
    }
    with open(HISTORY_FILE, "a", encoding="utf-8") as f:
        f.write(json.dumps(record) + "\n")
    return record

def load_history(url: str) -> list[dict]:
    rows = []
    try:
        with open(HISTORY_FILE, encoding="utf-8") as f:
            for line in f:
                row = json.loads(line)
                if row.get("url") == url:
                    rows.append(row)
    except FileNotFoundError:
        pass
    return rows

Mỗi bản ghi có hình dạng chuẩn {product, url, price, currency, checked_at}. checked_at là một dấu thời gian ISO UTC được ghi lại tại thời điểm đọc, vì vậy mỗi mục đều tự mô tả. Đối với nhiều sản phẩm hơn, hoán đổi tệp JSONL cho một bảng SQLite hoặc bất kỳ cơ sở dữ liệu nào — lược đồ là giống nhau, và logic so sánh sẽ không thay đổi.


Bước 4 — So sánh với mức thấp trước đó và quyết định

Quyết định thông báo là một so sánh đơn giản: liệu giá gần nhất có thấp hơn mức giá thấp nhất đã thấy cho URL này không? Lấy lịch sử trước đó, tìm mức thấp nhất trước đó và so sánh.

python Copy
def is_price_drop(url: str, current: float) -> dict:
    prior = [r["price"] for r in load_history(url) if r.get("price") is not None]
    previous_low = min(prior) if prior else None

    dropped = (
        current is not None
        and previous_low is not None
        and current < previous_low
    )
    return {
        "dropped": dropped,
        "current": current,
        "previous_low": previous_low,
        "delta": (current - previous_low) if dropped else None,
    }

Lần đầu tiên một sản phẩm được kiểm tra không có lịch sử trước đó, vì vậy previous_lowNone và không có thông báo nào được gọi — lần chạy đó gieo mầm cho nhật ký. Từ lần kiểm tra thứ hai trở đi, bất kỳ mức giá nào thấp hơn mức thấp đang chạy được gọi là giảm. Để gửi thông báo về một mức giá mục tiêu thay vì mức thấp nhất mọi thời đại, so sánh current với một ngưỡng cố định; để gửi thông báo về bất kỳ mức giảm nào so với lần kiểm tra trước đó, so sánh với bản ghi cuối cùng thay vì mức tối thiểu. Các bước lưu trữ và render vẫn giữ nguyên bất kể quy tắc nào được kích hoạt.


Bước 5 — Gửi webhook khi có sự giảm giá

Khi việc so sánh cho biết "giảm giá", hãy gửi thông báo. Một webhook là đường dẫn đơn giản nhất để gửi thông báo — một requests.post đến một điểm cuối Slack, Discord hoặc email-relay. Không có trung gian, không có hàng đợi.

python Copy
import requests

WEBHOOK_URL = os.environ["PRICE_ALERT_WEBHOOK"]  # URL Slack / Discord / relay

def send_alert(record: dict, decision: dict) -> None:
    message = (
        f"Giảm giá: {record['product']}\n"
        f"Hiện tại {record['currency']} {decision['current']:.2f} "
        f"(trước đây {decision['previous_low']:.2f}, "
        f"giảm {abs(decision['delta']):.2f})\n"
        f"{record['url']}"
    )
    response = requests.post(WEBHOOK_URL, json={"text": message}, timeout=15)
    response.raise_for_status()

raise_for_status() cho biết phản hồi không phải 2xx từ webhook để một điểm cuối cấu hình sai không im lặng làm mất thông báo. Phần thân {"text": message} phù hợp với định dạng webhook đến của Slack và Discord; điều chỉnh hình dạng JSON theo những gì điểm cuối nhận vào mong đợi.

Kết nối năm bước vào một lần kiểm tra:

python Copy
def check_once():
    reading = read_price(URL)                  # Bước 2: render + trích xuất
    record = append_history(reading)           # Bước 3: lưu trữ
    decision = is_price_drop(URL, record["price"])  # Bước 4: so sánh
    if decision["dropped"]:
        send_alert(record, decision)           # Bước 5: thông báo
    return record, decision

Bước 6 — Lên lịch kiểm tra

Copy
Vòng lặp đủ nhỏ để chạy không cần giám sát trên bất kỳ trình lịch nào. Kiểm tra hàng ngày là đủ cho hầu hết các giao dịch; việc theo dõi cạnh tranh có thể chạy hàng giờ. Tạo một phiên mới bên trong mỗi lần chạy để đầu ra được sạch sẽ.

Trên Linux hoặc macOS, một mục cron chạy script một lần mỗi ngày vào lúc 09:00:

```bash
# crontab -e
0 9 * * * cd /opt/price-watch && /usr/bin/python3 check.py >> watch.log 2>&1

Trên Windows, đăng ký cùng một lệnh với Task Scheduler. Một bộ hẹn giờ không máy chủ (một chức năng đám mây theo lịch trình) cũng hoạt động tốt — script không có trạng thái lâu dài ngoài tệp lịch sử, do đó nó phù hợp với một cuộc gọi không trạng thái. Đối với danh sách giám sát của nhiều sản phẩm, lặp qua các URL và giữ mức độ đồng thời ở mức vừa phải — khoảng ba bản kết xuất song song trên mỗi máy chủ là một giới hạn hợp lý — để đầu ra hoạt động tốt.

python Copy
WATCHLIST = [
    "https://www.walmart.com/ip/example-15-inch-laptop/123456789",
    "https://www.walmart.com/ip/example-wireless-headphones/987654321",
]

def run_watchlist():
    for url in WATCHLIST:
        reading = read_price(url)              # mỗi lần đọc kết nối mới, đầu ra của Mỹ
        record = append_history(reading)
        decision = is_price_drop(url, record["price"])
        if decision["dropped"]:
            send_alert(record, decision)

Những gì bạn nhận lại

Mỗi lần kiểm tra sẽ thêm một bản ghi vào nhật ký lịch sử. Hình dạng là bản ghi giám sát giá tiêu chuẩn:

json Copy
// Lược đồ phản ánh chính xác những gì append_history viết.
// Giá trị trường là mẫu minh họa, không phải là giá đọc sống của bất kỳ sản phẩm nào.
{
  "product": "Máy tính xách tay 15 inch ví dụ",
  "url": "https://www.walmart.com/ip/example-15-inch-laptop/123456789",
  "price": 1299.00,
  "currency": "USD",
  "checked_at": "25-May-2026 09:00 UTC"
}

Theo thời gian, nhật ký trở thành một chuỗi thời gian giá sạch — một dòng cho mỗi lần kiểm tra, sẵn sàng để biểu đồ hoặc cho một mô hình xu hướng. Một vài quan sát chân thực về đầu ra này, đáng biết trước khi chạy ở quy mô lớn:

  • Địa lý quyết định số lượng. Giá ghi lại chỉ có ý nghĩa tương đối đối với đầu ra mà nó được đọc trên đó. Giữ proxy_country cố định cho một tầm theo dõi nhất định; nếu bạn so sánh giá qua các thị trường, hãy lưu trữ quốc gia bên cạnh mỗi bản ghi.
  • Sự ổn định của bộ chọn. Gắn vào các nút itemprop, data-testid, hoặc aria-label. Tên lớp đã băm thay đổi giữa các lần triển khai và sẽ âm thầm bắt đầu trả về None — khi một giá ngừng được phân tích, hãy kiểm tra lại DOM đã được kết xuất và làm chặt lại phần gắn.
  • Tách các nút giá. Một số trang sẽ kết xuất đô la và cent (hoặc ký hiệu và số tiền) trong các phần tử riêng biệt. Đọc từng cái và ghép lại trước khi chuẩn hóa, nếu không số đã phân tích sẽ sai.
  • Mã trạng thái không phải là giá. Một trang có thể trả về HTTP 200 nhưng vẫn có thể là thách thức hoặc quảng cáo giữa. Xác nhận một lần đọc thực sự bằng cách kiểm tra rằng nút giá tồn tại và được phân tích, không chỉ rằng yêu cầu đã thành công.
  • Giá có thể null. Đối xử với một giá thiếu như None thay vì số không. So sánh ở Bước 4 đã bỏ qua các lần đọc None, vì vậy một trang không thể phân tích không tạo ra cảnh báo giả.

Kết luận: một cảnh báo giá trong năm bước

Toàn bộ quy trình giảm xuống năm bước: kết xuất trang sản phẩm trong một trình duyệt đám mây chống phát hiện, trích xuất giá từ DOM đã được lấp đầy, thêm nó vào nhật ký lịch sử, so sánh với mức thấp trước đó, và gửi một webhook khi có sự giảm giá — với một trình lập lịch chạy vòng lặp theo chu kỳ. Vì bước kết xuất trả về cùng một cái nhìn mà lưu lượng truy cập tự nhiên thấy, giá ghi lại là số chính xác theo vùng mà người tiêu dùng thực sự sẽ trả.

Để mở rộng giám sát đến các nhà bán lẻ khác, hãy tái sử dụng cùng một vòng lặp: gắn đầu ra vào thị trường phù hợp, gắn vào một nút giá ổn định cho trang đó, và giữ cho việc so sánh không thay đổi. Các mô hình kết xuất và bộ chọn riêng biệt của nhà bán lẻ trong danh sách các trình thu thập Amazon tốt nhấtCác trình thu thập Zillow tốt nhất năm 2026 trực tiếp dung hòa với Bước 2. Gắn đất nước proxy, gắn vào các bộ chọn ngữ nghĩa, coi giá vắng mặt là có thể null, và giữ cho mức độ đồng thời vừa phải trên mỗi máy chủ.


Sẵn sàng để xây dựng quy trình dẫn dữ liệu sử dụng 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 quy trình giám sát giá: Discord · Telegram.

Đăng ký tại trang web Scrapeless để có thời gian chạy Scraping Browser miễn phí và điều chỉnh các mẫu trên cho các sản phẩm và khu vực mà quy trình cần. Xem giá cả để biết chi tiết về kế hoạch.


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

Q1: Xây dựng cảnh báo giảm giá có hợp pháp không?
Theo dõi giá cả công khai là một hoạt động phổ biến và được thực hiện rộng rãi, nhưng các quy tắc khác nhau tùy theo khu vực pháp lý và các điều khoản dịch vụ của từng trang web. Đọc các điều khoản của trang mục tiêu, chỉ lấy dữ liệu có sẵn công khai, tránh thu thập thông tin cá nhân và tham khảo ý kiến ​​luật sư cho trường hợp sử dụng cụ thể của bạn. Scrapeless chỉ truy cập dữ liệu công khai có sẵn trong khi tuân thủ các luật hiện hành và chính sách bảo mật của trang web.

Q2: Tôi có cần một proxy không, và quốc gia có quan trọng không?
Có, cả hai câu hỏi đều đúng. Giá cả, tiền tệ và tính khả dụng thay đổi theo khu vực và theo độ tin cậy của địa chỉ IP, vì vậy cần phải có một điểm ra dân cư và quốc gia là yếu tố quyết định. Gán proxy_country cho thị trường mà thông báo theo dõi — "US" trong các ví dụ ở đây — để mọi giá đã ghi lại được so sánh đồng nhất. Để theo dõi một sản phẩm qua nhiều thị trường, hãy chạy một công cụ theo dõi cho mỗi quốc gia và lưu quốc gia cùng với mỗi giá.

Q3: Tại sao không chỉ gửi một yêu cầu HTTP và phân tích giá?
Hầu hết các giá bán lẻ được hiển thị ở phía khách hàng sau khi JavaScript chạy, vì vậy một yêu cầu HTTP thô sẽ trả về một shell trống, không phải là con số. Nhiều trang web cũng phục vụ một trang thách thức chống bot dưới trạng thái HTTP 200 đối với các yêu cầu tự động. Việc kết xuất trang trong một trình duyệt đám mây chống phát hiện sẽ trả về cùng một DOM đã được dân organic traffic nhìn thấy, bao gồm cả nút giá thực.

Q4: Làm thế nào để tôi xác nhận rằng một đọc là giá thực chứ không phải là trang thách thức?
Kiểm tra xem nút giá có tồn tại và phân tích thành một số hay không, không chỉ là yêu cầu trả về HTTP 200. Logic so sánh xem một giá bị thiếu hoặc không thể phân tích như là None và không tạo ra bất kỳ thông báo nào, vì vậy một trang xen kẽ thỉnh thoảng không tạo ra sự giảm giá giả. Khi một giá không thể phân tích một cách liên tục, hãy kiểm tra lại DOM đã được kết xuất và thắt chặt bộ chọn.

Q5: Tần suất kiểm tra nên chạy bao nhiêu lần, và có thể theo dõi bao nhiêu sản phẩm?
Một kiểm tra hàng ngày phù hợp với hầu hết các công cụ theo dõi giao dịch; việc giám sát cạnh tranh có thể chạy hàng giờ. Đối với một danh sách theo dõi, lặp lại qua các URL bên trong một lần chạy đã lên lịch và giữ đồng thời khiêm tốn — khoảng ba lần kết xuất song song mỗi máy chủ là một giới hạn hợp lý — để điểm ra không bị hành xử kém. Phân tán qua các máy chủ cho phạm vi lớn hơn.

Q6: Điều này có thể hoạt động mà không cần một tác nhân AI không?
Có. Script Python trong Các Bước 1–6 chạy từ đầu đến cuối mà không cần sự can thiệp — kết nối, kết xuất, trích xuất, lưu trữ, so sánh, cảnh báo, lên lịch. Một tác nhân AI là một cách tiện lợi để điều khiển các bước kết xuất và bộ chọn bằng ngôn ngữ tự nhiên, nhưng là tùy chọn; Playwright và một trình lập lịch là tất cả những gì vòng lặp cần.

Q7: Giá đã ngừng phân tích sau khi trang web được thiết kế lại — điều gì đã thay đổi?
Trang web đã thay đổi tên lớp của mình. Kiểm tra lại DOM đã được kết xuất và gán lại dựa trên một bộ chọn ngữ nghĩa (itemprop, data-testid, aria-label) thay vì một lớp đã được mã hóa. Đối xử với giá như thể có thể null để một thiết kế lại không bao giờ tiêm một con số sai vào nhật ký lịch sử.

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