# 如何抓取Etsy商店和产品数据（标签、价格、评分）

Etsy将清晰、结构化的数据隐藏在每个产品页面的JSON数据块中——名称、价格、评分、标签。解析这些数据而不是与HTML搏斗，并挖掘这些标签进行竞争对手花钱进行的关键词研究。

Etsy是产品和关键词研究的金矿——数百万个活跃的列表，每个都由真实买家标记和评分。问题在于[官方Open API v3](https://www.etsy.com/developers)每天大约限制在10,000次请求和每秒10次，并且将有趣的端点置于OAuth之后。对于任何实际规模的竞争对手和市场研究，你将抓取公共页面。好消息是：如果你知道去哪里找，Etsy会提供清晰、结构化的数据。本指南展示了如何以可靠的方式**抓取Etsy商店和产品数据**——价格、评分和标签——而不需要与HTML搏斗。

## 可靠的技巧：解析ld+json，而不是HTML

每个Etsy产品页面都嵌入了一个`<script type="application/ld+json">`块：schema.org `Product`数据，包含标题、SKU、价格、货币，以及一个`aggregateRating`，其中包含星级值和评论数量。解析该JSON比追踪Etsy旋转的CSS类要稳定得多。通过代理加载页面，提取数据块，你可以在几行代码中获得一个清晰的记录：

```python
import json, requests
from bs4 import BeautifulSoup

proxy = "http://USER:PASS@residentialpremium.quantumproxies.io:8080"
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 抓取流水线：遍历搜索页面，从 HTML 卡片中收集并去重商品 ID，通过住宅代理抓取每个商品页面，然后解析其中的 ld+json 数据块；卡片指出，搜索页的 ld+json 只列出前 8 个商品，因此 ID 要从卡片中获取。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335162/blog/generated/qp-b9-025-diag1.png)
*搜索页面显示ID；每个产品页面的ld+json数据块包含结构化记录。*

## 值得提取的字段——尤其是标签

除了价格和评分，最高价值的信号是标签。每个Etsy列表可以携带多达13个标签，它们正是卖家认为买家搜索的短语。在一个类别中收集畅销列表的标签，你就逆向工程出一个关键词地图——与专业SEO工具转售的数据相同。将其与评论数量配对作为需求的代理，你可以根据实际销售情况对类别进行排名。添加列表的收藏数量及其上市日期（如果可用），你可以区分出经过验证的卖家和新入市的趋势追随者——这就是值得瞄准的关键词和看似繁忙的关键词之间的区别。这就是抓取比任何付费数据集更快回本的地方。我们的[产品评论抓取指南](https://quantumproxies.io/blog/scraping-product-reviews-with-proxies)涵盖了将评论文本转化为情感信号的方法。

## 抓取搜索和商店页面

搜索和商店页面的行为不同。它们的ld+json仅列出前八个项目，即使页面渲染了数十个，因此对于列表发现，你需要解析HTML卡片，而不是JSON。获取列表链接，去重数字ID，然后获取每个产品页面的完整记录。Etsy的搜索URL接受一个页面参数，因此你可以在循环中浏览结果：

```python
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上，如果需要缩略图，可以直接在标记中链接。对于商店级研究，商店页面包含卖家的评分、销售数量和政策——这对于按销量对竞争对手进行排名很有用。

[获取用于市场抓取的住宅IP](https://quantumproxies.io/residential-proxies)

## 变体、分页和保持低带宽

两个细节将玩具抓取器与大规模运行的抓取器区分开来。首先是变体：许多Etsy列表销售多个选项——尺寸、颜色、个性化——每个都有自己的价格。ld+json `offers`字段可以是单个对象或它们的数组，因此需要处理两者，否则你将默默地记录下第一个价格并误读整个类别。其次是分页：搜索结果是分页的，Etsy限制了你可以浏览任何单个查询的深度。与其尝试分页到广泛术语的末尾，不如将一个类别分成更窄的查询（按材料、风格或价格带），这样每次搜索返回一个浅显、完整的集合。你获得更好的覆盖率，并且比一个抓取器在“礼物”的第40页上磨蹭触发更少的反机器人检查。

带宽是市场抓取中潜在的成本。一个完整的Etsy产品页面会加载很多图片和脚本，如果你只需要ld+json，这些是不需要的。当你用普通HTTP获取时，你已经在跳过图片下载——标记是文本。为少数真正需要的页面保留JavaScript渲染，因为渲染页面的字节数可能是原始获取的多倍。积极缓存：一个列表的标签和标题很少在短时间内改变，因此条件刷新比重新下载所有内容更好。我们的[削减代理带宽成本指南](https://quantumproxies.io/blog/reduce-proxy-bandwidth-costs-scraping)涵盖了保持每GB账单合理的HEAD检查和资产阻止策略。

## 突破CAPTCHA墙

Etsy运行反机器人检查，使用无头浏览器或数据中心IP访问搜索页面很快就会触发CAPTCHA。三件事可以帮助你通过。首先，使用[住宅代理](https://quantumproxies.io/residential-proxies)——真实的ISP分配的IP被视为购物者，而不是服务器。其次，将地理位置与您正在研究的市场匹配；价格和运费估算因国家而异。第三，保持节奏——稳定、类似人类的间隔比突发更好。如果你不想管理渲染和重试，[Scraper API](https://quantumproxies.io/scraper-api)可以为你处理指纹、轮换和JavaScript，并返回解析后的页面，这通常比维护无头舰队的代码更少。有关更广泛的模式，请参阅我们的[跨Amazon、eBay和Etsy的市场自动化指南](https://quantumproxies.io/blog/proxies-for-marketplace-automation-amazon-ebay-etsy)。

关于道德的一句话：抓取公共列表数据，尊重Etsy的条款和robots指令，不要收集卖家的个人联系方式——这从市场研究跨越到了数据保护问题。这是指导，而不是法律建议；请检查您自己的使用案例。

![Etsy 官方 Open API v3 与其公开页面并列：API 上限约为每天 10,000 次请求、每秒 10 次，关键端点需要 OAuth，而公开页面会显示每件商品最多 13 个标签的完整列表；卡片补充说，搜索页的 ld+json 只列出 8 个商品，住宅 IP 可以访问这些页面。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335162/blog/generated/qp-b9-025-diag2.png)
*公共页面提供的内容比API返回的更多——如果你的IP可以在不被阻止的情况下访问它们。*

## 常见问题解答

### 如何从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上，你就拥有了价格、评分和搜索意图的实时数据流——用于真实产品研究的原材料。

[使用Scraper API大规模抓取Etsy](https://quantumproxies.io/scraper-api)
