如何抓取Etsy商店和产品数据(标签、价格、评分)
Etsy将清晰、结构化的数据隐藏在每个产品页面的JSON数据块中——名称、价格、评分、标签。解析这些数据而不是与HTML搏斗,并挖掘这些标签进行竞争对手花钱进行的关键词研究。
Etsy是产品和关键词研究的金矿——数百万个活跃的列表,每个都由真实买家标记和评分。问题在于官方Open API v3每天大约限制在10,000次请求和每秒10次,并且将有趣的端点置于OAuth之后。对于任何实际规模的竞争对手和市场研究,你将抓取公共页面。好消息是:如果你知道去哪里找,Etsy会提供清晰、结构化的数据。本指南展示了如何以可靠的方式抓取Etsy商店和产品数据——价格、评分和标签——而不需要与HTML搏斗。
可靠的技巧:解析ld+json,而不是HTML
每个Etsy产品页面都嵌入了一个<script type="application/ld+json">块:schema.org Product数据,包含标题、SKU、价格、货币,以及一个aggregateRating,其中包含星级值和评论数量。解析该JSON比追踪Etsy旋转的CSS类要稳定得多。通过代理加载页面,提取数据块,你可以在几行代码中获得一个清晰的记录:
import json, requests
from bs4 import BeautifulSoup
proxy = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": proxy, "https": proxy}
def scrape_listing(url):
r = requests.get(url, proxies=proxies, timeout=20)
soup = BeautifulSoup(r.text, "html.parser")
blob = soup.find("script", {"type": "application/ld+json"})
data = json.loads(blob.string)
return {
"title": data.get("name"),
"price": data.get("offers", {}).get("price"),
"curr": data.get("offers", {}).get("priceCurrency"),
"rating": data.get("aggregateRating", {}).get("ratingValue"),
"reviews": data.get("aggregateRating", {}).get("reviewCount"),
}
print(scrape_listing("https://www.etsy.com/listing/1234567890/example"))

值得提取的字段——尤其是标签
除了价格和评分,最高价值的信号是标签。每个Etsy列表可以携带多达13个标签,它们正是卖家认为买家搜索的短语。在一个类别中收集畅销列表的标签,你就逆向工程出一个关键词地图——与专业SEO工具转售的数据相同。将其与评论数量配对作为需求的代理,你可以根据实际销售情况对类别进行排名。添加列表的收藏数量及其上市日期(如果可用),你可以区分出经过验证的卖家和新入市的趋势追随者——这就是值得瞄准的关键词和看似繁忙的关键词之间的区别。这就是抓取比任何付费数据集更快回本的地方。我们的产品评论抓取指南涵盖了将评论文本转化为情感信号的方法。
抓取搜索和商店页面
搜索和商店页面的行为不同。它们的ld+json仅列出前八个项目,即使页面渲染了数十个,因此对于列表发现,你需要解析HTML卡片,而不是JSON。获取列表链接,去重数字ID,然后获取每个产品页面的完整记录。Etsy的搜索URL接受一个页面参数,因此你可以在循环中浏览结果:
import re
def find_listing_ids(query, pages=3):
ids = set()
for page in range(1, pages + 1):
url = f"https://www.etsy.com/search?q={query}&page={page}"
r = requests.get(url, proxies=proxies, timeout=20)
# listing links look like /listing/<id>/<slug>
for m in re.findall(r"/listing/(\d+)/", r.text):
ids.add(m)
return ids
ids = find_listing_ids("ceramic+mug", pages=3)
print(len(ids), "unique listings")
产品图片位于i.etsystatic.com CDN上,如果需要缩略图,可以直接在标记中链接。对于商店级研究,商店页面包含卖家的评分、销售数量和政策——这对于按销量对竞争对手进行排名很有用。
变体、分页和保持低带宽
两个细节将玩具抓取器与大规模运行的抓取器区分开来。首先是变体:许多Etsy列表销售多个选项——尺寸、颜色、个性化——每个都有自己的价格。ld+json offers字段可以是单个对象或它们的数组,因此需要处理两者,否则你将默默地记录下第一个价格并误读整个类别。其次是分页:搜索结果是分页的,Etsy限制了你可以浏览任何单个查询的深度。与其尝试分页到广泛术语的末尾,不如将一个类别分成更窄的查询(按材料、风格或价格带),这样每次搜索返回一个浅显、完整的集合。你获得更好的覆盖率,并且比一个抓取器在“礼物”的第40页上磨蹭触发更少的反机器人检查。
带宽是市场抓取中潜在的成本。一个完整的Etsy产品页面会加载很多图片和脚本,如果你只需要ld+json,这些是不需要的。当你用普通HTTP获取时,你已经在跳过图片下载——标记是文本。为少数真正需要的页面保留JavaScript渲染,因为渲染页面的字节数可能是原始获取的多倍。积极缓存:一个列表的标签和标题很少在短时间内改变,因此条件刷新比重新下载所有内容更好。我们的削减代理带宽成本指南涵盖了保持每GB账单合理的HEAD检查和资产阻止策略。
突破CAPTCHA墙
Etsy运行反机器人检查,使用无头浏览器或数据中心IP访问搜索页面很快就会触发CAPTCHA。三件事可以帮助你通过。首先,使用住宅代理——真实的ISP分配的IP被视为购物者,而不是服务器。其次,将地理位置与您正在研究的市场匹配;价格和运费估算因国家而异。第三,保持节奏——稳定、类似人类的间隔比突发更好。如果你不想管理渲染和重试,Scraper API可以为你处理指纹、轮换和JavaScript,并返回解析后的页面,这通常比维护无头舰队的代码更少。有关更广泛的模式,请参阅我们的跨Amazon、eBay和Etsy的市场自动化指南。
关于道德的一句话:抓取公共列表数据,尊重Etsy的条款和robots指令,不要收集卖家的个人联系方式——这从市场研究跨越到了数据保护问题。这是指导,而不是法律建议;请检查您自己的使用案例。

常见问题解答
如何从Etsy抓取数据?
通过住宅代理加载每个产品页面并解析嵌入的ld+json块,其中包含标题、价格、货币和评分等清晰的schema.org数据。对于发现,解析搜索页面的HTML卡片以收集列表ID,然后获取每个产品页面。这比抓取旋转的CSS类更稳定。
Etsy是否有用于抓取的API?
Etsy的官方Open API v3存在,但每天大约限制在10,000次请求和每秒10次,并且将许多端点置于OAuth之后。对于大规模的竞争对手研究,大多数人抓取公共页面,这通常暴露出比API返回的更多内容——包括每个列表的完整标签列表。
如何获取Etsy标签进行关键词研究?
每个列表可以携带多达13个标签,存在于页面标记中。抓取一个类别中的畅销列表,收集它们的标签,并按频率排名以构建关键词地图。通过评论数量加权近似需求,给你一个数据支持的销售和买家搜索的图景。
为什么在抓取时Etsy会显示CAPTCHA?
数据中心IP或激进的无头浏览器被视为机器人。使用住宅代理,使请求看起来像真实的购物者,将地理位置与市场匹配,并以类似人类的间隔发送请求。Scraper API为你渲染和轮换,消除了大多数CAPTCHA触发,无需额外代码。
成功抓取Etsy主要是关于读取它已经提供的JSON并在不被阻止的情况下访问页面。解析ld+json,挖掘标签,分散请求到干净的住宅IP上,你就拥有了价格、评分和搜索意图的实时数据流——用于真实产品研究的原材料。