数据抓取

如何用住宅代理采集 eBay 的商品与卖家数据

eBay 的已售商品,是最接近一个公开价格预言机的东西。如何按站点精准采集商品与卖家数据,用住宅代理。

James Meadow

James Meadow

2026年7月19日 · 2 分钟阅读

对转卖商和电商分析师而言,eBay 有一样几乎没有别的市场平台会公开给你的东西:已售商品(sold listings)。大多数站点给你看的是要价。eBay 给你看的,是东西实际卖了多少钱、在哪一天、什么成色、来自哪个卖家。那不是一个价格信号,那是交易数据,也正因如此,eBay 对从球鞋到工业零件的一切,扮演着一个公开价格预言机的角色。

难的地方在于可靠地把它采下来。eBay 运营着价格与需求各不相同的多个地区站点、会防御自动化访问,并按访客个性化结果。从一个办公室 IP 去拉这些数据,你得到的是一个国家的视角,且满是缺口。这份指南讲清楚什么值得采、什么时候该改用官方 API,以及如何用住宅代理把其余部分精准地收集起来。

到底什么才值得采

一个 eBay 商品页信息密集,但分析师真正在意的是一个特定的子集:

商品层面

  • 价格与形式 —— 价格,以及关键的:是拍卖还是一口价(Buy It Now)。把两者混在一起,会污染你算出的任何均值。
  • 成色 —— 全新、二手、翻新、配件损坏。在 eBay 上,成色对价格离散度的驱动,几乎超过其他任何因素。
  • 运费与所在地 —— 费用和物品所在地,它们会改变真正的到手价。
  • 物品参数 —— 品牌、型号、尺码,以及那些让商品彼此可比的结构化属性。

已售 / 已结束商品(最有价值的部分)

  • 成交价与售出日期 —— 买家实际付了多少,以及什么时候。
  • 售罄率(sell-through) —— 某个物品的挂牌中,有多少真的卖出去了,对比多少是流拍过期。这就是把”值得进货”和”永远压在手里”分开的那个数字。

卖家层面

  • 信誉分与好评率、店铺名,以及是否为商业卖家。
  • 品类结构与定价行为 —— 一个竞争卖家挂了什么、什么价、动得多快。

第三类,正是把采集变成竞争情报的那部分:不只是一件商品卖多少钱,而是哪些卖家正在靠它赚钱。

在官方 API 够用的地方,就从它开始

这一点值得直说,因为它能替你省力气:eBay 有官方 API,在它能覆盖你需求的地方,它就是正确的第一站。它稳定、结构化、不会因为页面标记变动而崩,而且是被明确许可的。如果你要的是标准的商品数据,而你的量级和地区又落在它的条款和限额之内,那就用它。

代理登场的,是 API 服务不好的那些场景:超出其覆盖范围的公开数据、以分析师所需广度跨越各地区站点的覆盖,或是完全以一个本地买家的视角去看这个市场。诚实的说法是:它们是互补,而不是替代;在 API 够用的地方从 API 开始,只是更好的工程实践。

为什么其余部分是一个代理问题

eBay 的三个特性,让宽泛的公开采集成为一个访问问题。

eBay 按站点切分,且做地理个性化。 ebay.comebay.co.ukebay.deebay.com.au 是库存、价格、需求和售罄率都不同的站点。哪怕在同一个站点内,结果也会按访客位置个性化,运送选项和可得性都会变。对一个做跨境套利的转卖商来说,这就是分析本身:同一件东西在英国与在德国分别能卖多少。用一个美国 IP 去抓 ebay.de,两边的视角你都拿不准,所以你必须身处你正在度量的那个市场(国家与城市级定位)。

eBay 会防御自动化访问。 和任何大型市场平台一样,它跑着反机器人系统。数据中心 IP 会被标记、限流,或被投喂插页,于是你记录到的是机器人版本,而不是买家看到的页面(为什么爬虫会被封)。住宅 IP 带着真实用户的信任,看到的是真实的商品页。

覆盖既广又要反复。 跨多个站点做一次品类扫荡,还要每天刷新以保持售罄率是最新的,这是海量请求。从少数几个 IP 出发,你会触发速率限制,最后拿到一个片面的样本,而这在这里是致命的:一个从被封锁扭曲过的样本里算出来的售罄率,比没有这个数字还糟。

路由到正确的站点

Shifter gateway 上,你通过把国家编码进代理用户名来挑选它,一个端点,没有 IP 列表。让代理国家与站点域名相匹配:

Terminal window
# 作为美国买家访问 ebay.com
curl -x customer-USERNAME-country-us:PASSWORD@p.shifter.io:443 \
"https://www.ebay.com/itm/123456789012"
# 作为英国买家访问 ebay.co.uk
curl -x customer-USERNAME-country-gb:PASSWORD@p.shifter.io:443 \
"https://www.ebay.co.uk/itm/123456789012"

注意英国的国家代码是 gb,不是 uk,这个小细节一旦弄错,就会悄无声息地产出错误市场的数据。

用代码采集

eBay 的大部分商品数据都在初始 HTML 里,所以一个简单的 HTTP 客户端,比驱动一个浏览器更快、也便宜得多(完整的客户端配置见用 Python 使用住宅代理):

import os, requests
from bs4 import BeautifulSoup
USER, PASS = os.environ["SHIFTER_USER"], os.environ["SHIFTER_PASS"]
def proxy(country="us"):
url = f"http://{USER}-country-{country}:{PASS}@p.shifter.io:443"
return {"http": url, "https": url}
MARKETS = {"us": "ebay.com", "gb": "ebay.co.uk", "de": "ebay.de"}
def fetch_listing(item_id, country="us"):
domain = MARKETS[country]
url = f"https://www.{domain}/itm/{item_id}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Accept-Language": "en-GB,en;q=0.9" if country == "gb" else "en-US,en;q=0.9",
"Accept-Encoding": "gzip, br",
}
r = requests.get(url, headers=headers, proxies=proxy(country), timeout=30)
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
return {
"item_id": item_id,
"market": country,
"title": (t := soup.select_one("h1")) and t.get_text(strip=True),
"price": (p := soup.select_one(".x-price-primary")) and p.get_text(strip=True),
# 成色、运费和物品参数各自在自己的区块里;
# 把每个选择器都当作可选的,并对你提取到的东西做校验。
}

两点实务提醒。把 Accept-Language 设成与你所定位的站点相匹配,一个英国 IP 却发 en-US,是一个你完全不需要的不一致。以及,把每个选择器都当作可选:eBay 的页面标记会随品类和商品类型而变,所以要做防御性解析并校验,而不是假定某个字段一定存在。

做宽泛的品类扫荡时按请求轮换;当你翻阅单个卖家的库存时,保持一个粘性会话,好让这一串序列看起来像一个买家。因为 IP 质量决定了你有多频繁地看到真实页面,IP 信誉值得理解;而持续(而非偶尔)的封锁,指向的是质量或行为(如何避免被封)。

把商品数据变成分析

采集只是输入;分析才是转卖商真正赚钱的地方。在给这些数据建模时,有几件事很要紧:

把已售与在售分开。 在售商品是要价,那是愿望。已售商品是交易。永远不要把它们平均在一起,也永远不要在没说清是哪一种的情况下报一个”eBay 价格”。

按成色和形式分段。 一件二手品的成交价和一件全新品的,是不同的市场。拍卖成交和一口价成交,行为也不一样。跨这些分段去平均,产出的是一个什么都没描述的数字。

算售罄率,而不只是价格。 在一个时间窗内,已售除以总挂牌数,告诉你流动性。一个高价配 10% 的售罄率,是比一个能稳定出清的较低价更差的进货目标。

有意识地跨站点比较。 跨境价差是转卖商的优势所在,但前提是每个市场的数字,确实是从那个市场采来的,而这正是上面那套地理路由要紧的原因。

要把产出结构化成一个可供研究使用的数据集,如何用网络抓取构建数据集讲了机制;同样的功课也支撑着价格监测数字货架分析

负责任地使用

只采集公开的商品数据,任何买家都能看到的标题、价格、成色、运费,以及公开的卖家指标。个人数据属于禁区:买家身份、私信,以及挂在账号上的个人细节都不是可取之物;而评价留言应当谨慎处理,因为它们可能包含个人信息。

除此之外:遵守 eBay 的条款和速率限制、不要削弱站点,并在官方 API 能覆盖你用例的地方优先用它。eBay 的条款限制自动化访问,所以把采集守在公开数据上、保持合理的节奏,并对任何不确定的事项获取法律意见(网络抓取合法吗)。代理改变的是一个请求从哪个 IP 发出,而不是你是否应该发出它;我们的可接受使用政策是 Shifter 上何为允许的权威依据。

常见问题

我为什么需要代理来获取 eBay 数据? 因为 eBay 运营着价格与需求各异的多个地区站点、按位置个性化结果,并防御自动化访问。从一个 IP 出发,你看到的是一个市场,而且是片面的。住宅代理让你以真实本地买家的身份去采集每一个站点。

我该改用 eBay 的 API 吗? 在它能覆盖你需求的地方,该用,它稳定、结构化、且被许可。代理用于其覆盖范围之外的公开数据,或用于跨地区站点的广度。从 API 开始,其余用采集补上。

我能采集已售和已结束的商品吗? 已售商品是公开展示的,而且是对转卖商最有价值的输入,因为它们是成交价而非要价。把它们当作公开数据来采集,在分析中把已售与在售分开,并遵守 eBay 的条款和速率限制。

为什么英国要用国家代码 gb 因为 gateway 用的是 ISO 国家代码,其中英国是 gb。用 uk 会悄无声息地定位失败,也就意味着你会在错误的市场里去抓 ebay.co.uk,还意识不到。

eBay 该用住宅代理还是数据中心代理? 住宅。市场平台会检测并区别对待数据中心 IP,所以你会被限流或被投喂一个降级页面。住宅 IP 看到的是一个真实买家会看到的、真实且地理精准的商品页。

底线

eBay 公开的已售数据之所以格外有价值,是因为它是交易性的、而非愿望性的,它是转卖商做进货、定价和售罄率分析的骨架。麻烦在于,它被切分在各地区站点之间、按位置个性化、且受防护,所以你分析的准确度,完全取决于你是否以那个市场里真实买家的身份去采集每一个市场。在官方 API 合适的地方用它,其余的经由与站点相匹配的住宅 IP 路由,做防御性解析,并在模型里把已售与在售分开。

做到这些,你拿到的就是可以据以进货和定价的数字,而不是一个什么都没描述的混合均值。一个优质的住宅代理网络,就是让这份采集保持地理精准且完整的关键;定价页面有按 GB 计费的套餐,可以拿它对着你真正在做的品类和站点试用。

准备好开始了吗?

试用 Shifter 住宅代理,205M+ 个 IP,195+ 个国家,低至 $0.75/GB。

立即开始