登录 注册
价格监控

价格监控代理:让商店和电商平台都察觉不到你的价格采集

商店会给不同地区显示不同价格,并封禁同一地址频繁访问的人。在 Advanced.name 上跑价格追踪,请求会分散到数万个 IPv4 地址上,并从买家所在地区访问每家商店。

  • 4 号套餐 30,000 个 IP
  • 买家所在地区的价格
  • 列表每 10 分钟刷新
仓库通道里,一台平板显示着价格曲线
价格监控

价格追踪需要什么,套餐给了什么

追踪程序每小时访问同样的页面。被封的正是这种模式,代理池要把它藏起来。

任务需要什么套餐提供什么

每次访问同一商品都换一个 IP

4 号套餐有 30,000 个地址:同一商品页一个月才会碰到同一个 IP 一次

看到本地买家看到的价格

欧洲、独联体、中国代理池;美国及其他市场用全球混合

每小时检查数千个 SKU

4 号套餐最多 2,500 线程,6 号套餐 5,000

抓带图片和脚本的完整页面,而不只是 JSON

不限流量:按计划需要多频繁就抓多频繁

不限流量代理

按商品目录规模选套餐

每小时一万个 SKU,3 号套餐就够;要监控整个电商平台,需要 4 号或更大的套餐。

地区
时长
授权IP
1 第一个之后每个IP加价10%
本任务推荐
$0
  • 套餐代理数
  • 线程
  • 授权IP1
  • 协议HTTP / SOCKS5
价格表中的全部13个套餐

三步拿到第一份价格快照

按商店拆分商品目录

每家商店有自己的请求队列和自己那份代理列表。大型电商平台分到的份额最大。

轮换和重试

每个请求取下一个地址,失败时换地址重试两次,记录价格时连同取回它的 IP 一起保存。

每 10 分钟刷新列表

地址变旧后会离开代理池。链接总是返回当前的地址集,所以用定时器重新读取。

现成价格监控:每个商品一次请求,自动轮换

在 products.txt 中填入商品 URL,设置 COUNTRY。每个商品都通过下一个代理抓取,提取价格后写入 prices.csv。请根据商店的页面结构调整 PRICE_RE。可以先在免费代理列表上试跑。

CSV export link from your dashboard
buyers' country: prices are read as local shoppers see them
one product URL per line
regex, group 1 = the price
url;price;proxy;country is written here
数值来自表单;复制或下载生成好的文件。
显示脚本代码
Python 3.8+ · prices.py
#!/usr/bin/env python3
"""Price monitor for Advanced.name proxies.

Fetches product pages through proxies from the buyer's country and pulls the
price out of each page. One request per product goes through the next proxy, so
a shop sees the same address rarely. Standard library only. python3 prices.py
"""

# ================================ CONFIG ====================================
CSV_URL = "https://get.advanced.name/YOUR_LIST_ID.csv"  # CSV export link from your dashboard
COUNTRY = "DE"          # buyers' country: prices are read as local shoppers see them
MIN_SPEED = 3
PRODUCTS_FILE = "products.txt"           # one product URL per line
PRICE_RE = r'"price"\s*:\s*"?([0-9][0-9.,]*)'   # regex, group 1 = the price
OUT_FILE = "prices.csv"                   # url;price;proxy;country is written here
THREADS = 40
TIMEOUT = 20
RETRIES = 3
# ============================================================================

import csv
import io
import itertools
import re
import sys
import threading
import urllib.request
from concurrent.futures import ThreadPoolExecutor, as_completed

COL_IP, COL_PORT, COL_COUNTRY, COL_SPEED = 0, 1, 2, 3
UA = "Mozilla/5.0 (compatible; price-monitor/1.0)"
PRICE = re.compile(PRICE_RE)


def load_proxies():
    raw = urllib.request.urlopen(CSV_URL, timeout=30).read().decode("utf-8", "replace")
    pool = []
    for row in csv.reader(io.StringIO(raw), delimiter=";"):
        if len(row) <= COL_SPEED or not row[COL_PORT].strip().isdigit():
            continue
        if COUNTRY and row[COL_COUNTRY].strip().upper() != COUNTRY.upper():
            continue
        if int(row[COL_SPEED] or 0) < MIN_SPEED:
            continue
        pool.append(row[COL_IP].strip() + ":" + row[COL_PORT].strip())
    return pool


def main():
    proxies = load_proxies()
    if not proxies:
        sys.exit("No proxies for COUNTRY=%r." % COUNTRY)
    with open(PRODUCTS_FILE, encoding="utf-8") as fh:
        products = [line.strip() for line in fh if line.strip() and not line.startswith("#")]
    print("proxies: %d (%s), products: %d" % (len(proxies), COUNTRY, len(products)))

    rotation = itertools.cycle(proxies)
    lock = threading.Lock()

    def grab(url):
        for _ in range(RETRIES):
            with lock:
                proxy = next(rotation)
            handler = urllib.request.ProxyHandler({"http": "http://" + proxy, "https": "http://" + proxy})
            req = urllib.request.Request(url, headers={
                "User-Agent": UA, "Accept-Language": COUNTRY.lower() + "," + COUNTRY.upper()})
            try:
                html = urllib.request.build_opener(handler).open(req, timeout=TIMEOUT).read().decode("utf-8", "replace")
            except Exception:
                continue
            match = PRICE.search(html)
            return (match.group(1) if match else "not found"), proxy
        return "unreachable", ""

    rows = []
    with ThreadPoolExecutor(max_workers=THREADS) as pool:
        futures = {pool.submit(grab, u): u for u in products}
        for fut in as_completed(futures):
            url = futures[fut]
            price, proxy = fut.result()
            rows.append((url, price, proxy, COUNTRY))
            print("%-9s %s" % (price, url[:60]))

    with open(OUT_FILE, "w", encoding="utf-8", newline="") as out:
        writer = csv.writer(out, delimiter=";")
        writer.writerow(["url", "price", "proxy", "country"])
        writer.writerows(rows)
    print("written %s (%d rows)" % (OUT_FILE, len(rows)))


if __name__ == "__main__":
    main()
配置

搭建价格追踪

自写解析器

每个商品页都通过下一个代理抓取,从 JSON-LD 块或价格节点中取价格;上面的脚本用的是按商店调整的正则表达式。使用本地 IP 时同时发送该地区的 Accept-Language 和货币 Cookie,否则商店可能把你转到别的市场。

按压力排计划:库存每小时一次,价格每天两次。每个价格都保存 HTTP 状态码,这样某家商店连续出现 403 时,你就知道只需在那里放慢。

现成工具和电子表格

价格监控服务和无代码爬虫(Octoparse、Web Scraper)都能在设置里填代理列表:粘贴同一个 ip:port 文件即可。就连 Google Sheets 的 IMPORTXML 也能通过小型代理中转做轻量检查。

用代理检测保持代理池新鲜,扩展到完整目录之前,先在免费代理列表上把流程跑通。

实际效果

追踪程序看到的内容

保证价格数据干净的四条规则

  1. 用地区 IP 时,同时发送目标地区的 Accept-Language 和货币 Cookie;否则商店仍可能把你跳转走。
  2. 留意缓存价格和个性化价格:同一国家的两个 IP 应该返回同一个数字。
  3. 每个价格都连同 HTTP 状态码一起保存。某家商店连续返回 403,说明要在那里放慢,而不是全部放慢。
  4. 留出少量线程,复查价格跳动超过 20% 的商品。

适合此任务的按GB计费套餐

按国家查看此任务

显示全部国家
FAQ

关于本任务的问题

同一个商品多久能查一次?
在 4 号套餐上每小时一次很安全:有 30,000 个地址,同一商品页大约一个月才碰到同一个 IP 一次。
能看到本地价格吗?
能,只要 IP 来自商店所在地区,并且请求带上该地区的语言和货币请求头。
大量使用 JavaScript 的电商平台怎么办?
流量不计费,所以通过代理跑无头浏览器完全没问题。超时给 15 到 20 秒,每个会话换一个新 IP。
能先用我的商品目录试一下吗?
任何套餐都可免费试用 1 小时,线程不打折。让追踪程序跑一个小时,对比错误率。
怎么按城市采集价格?
通过Resi Prime:在连接字符串里设置城市,商店就会返回当地价格和配送日期。不限流量套餐和Resi Core只能到国家级别。
适合此任务的套餐

价格监控该选什么

每小时巡检一次商品目录,用不限流量套餐最划算。防护严格的商店和城市价格需要住宅地址。

不限流量代理

每小时巡检目录最佳选择

#4套餐 · 全球混合 · 30,000 IP · 2500 线程

每小时检查时,一个商品页大约一个月才会再次遇到同一个IP。完整页面不会增加费用。

$990 每月或每小时$4.20

Resi Core

严格的商店

2M+ IP · 200+国家 · 不限线程

每次请求都用商店所在国家的家庭IP。适用于对列表地址显示验证码而不显示价格的网站。

低至 $0.49 每GB1GB仅需$0.85

Resi Prime

城市价格

30M+ IP · 220个国家 · 不限线程

在连接字符串中设置城市和地区。商店会显示该城市买家看到的价格和配送信息。

低至 $1.39 每GB1GB仅需$2.29

今晚就拿到每家商店的价格

选好套餐,领取免费的 1 小时,把追踪程序跑遍整个商品目录。

价格 免费试用1小时