# 药品价格监测：正确构建GoodRx风格的数据

美国药品价格因药房、邮政编码和折扣卡而剧烈波动——公共工具已经揭示了这些信息。以下是如何大规模收集这些数据，官方数据集在哪里，以及如何在这个敏感领域保持合规。

美国处方药价格以混乱著称：同一种药物的价格可能因药房、邮政编码和你在柜台出示的折扣卡而大相径庭。这种差异正是价格透明工具存在的原因，也是基础数据对研究、比较网站和市场分析有价值的原因。这也是一个敏感领域，因此收集它的正确方式是合规优先——仅限公共、非个人的价格数据。本指南涵盖了数据值得监测的原因、官方来源在哪里、如何大规模捕捉地理差异，以及界限在哪里。这是实用信息，不是法律或医学建议。

## 为什么数据值得收集

差异巨大。RAND对2022年数据的分析发现，美国所有药品的价格是33个比较国家价格的278%——而品牌原研药品则是422%。仿制药则打破了这一趋势：美国无品牌仿制药，占美国处方量的约90%，实际上更便宜，仅为其他国家价格的67%。即使在美国，折扣工具也比较超过70,000家药房的价格，并宣传最高可节省80%。这种组合——巨大的跨国差距和国内的巨大差异——使系统化价格监测变得有用，无论您是在构建比较服务、跟踪市场还是研究负担能力。

## 从官方数据集开始

在抓取任何数据之前，先检查数据是否已经发布。很多数据已经发布。Medicaid发布了国家平均药品采购成本（NADAC），作为一个开放的、每周更新的数据集——药品的药房采购成本，无需抓取。几个州运行自己的透明工具；例如，佛罗里达州的工具允许您按县比较400种最常用药品的零售价格。政府和学术来源（RAND，ASPE）发布跨国比较。从官方API中提取结构化数据比抓取消费者网站更快、更清洁且风险更低——始终先用尽它。

```python
import requests

# NADAC is an open Medicaid dataset -- query it directly, no scraping
r = requests.get(
    "https://data.medicaid.gov/api/1/datastore/query/<dataset-id>/0",
    params={"limit": 500, "offset": 0},
    timeout=30,
)
rows = r.json().get("results", [])
for row in rows[:5]:
    print(row["ndc_description"], row["nadac_per_unit"], row["effective_date"])
```

![美国药品价格相当于 33 个对比国家价格的比例柱状图，数据来自 RAND 对 2022 年数据的分析：原研品牌药为 422%，全部药品为 278%，无品牌仿制药更便宜，为 67%；卡片还补充了美国国内的价差：折扣工具在超过 70,000 家药房之间比价。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335219/blog/generated/qp-b9-093-diag1.png)
*价格差距是数据重要的原因：美国品牌药的价格是其他国家的422%，而仿制药更便宜。*

## 捕捉地理差异

消费者价格工具中的有趣信号是本地的：药品的现金和折扣价格因邮政编码而异，因为药房竞争和协商价格因地区而异。要捕捉这种差异，您需要查询同一药品在一组邮政编码中的公共价格页面，并且——由于这些工具根据访问者的位置个性化——通过匹配地区的住宅出口路由每个请求，以便看到本地价格，而不是一个默认价格。输出是每种药品的每邮政编码价格矩阵：哪些药房在哪里最便宜，以及差异有多大。

```python
import requests, time, random

PROXY = "http://USER:PASS@residentialpremium.quantumproxies.io:8080"
proxies = {"http": PROXY, "https": PROXY}

def cash_prices(drug, zip_code):
    r = requests.get(f"https://example-rx.com/{drug}",
                     params={"zip": zip_code}, proxies=proxies, timeout=20)
    time.sleep(random.uniform(2, 4))          # polite pacing
    return parse_prices(r.text)               # [{pharmacy, price}, ...]

zips = ["10001", "33101", "90001", "60601"]   # NY, Miami, LA, Chicago
for z in zips:
    rows = cash_prices("atorvastatin-20mg", z)
    best = min(rows, key=lambda x: x["price"])
    print(z, best["pharmacy"], best["price"])
```

地理准确性是关键，因此拥有一个覆盖200多个地点的[城市和国家定位](https://quantumproxies.io/locations)的住宅池使得每邮政编码监测成为现实。这是[杂货和配送价格情报](https://quantumproxies.io/blog/grocery-delivery-price-scraping)背后的同一位置优先方法。

还有一个值得捕捉的轴：支付者差异。同一种药品有现金价格、折扣卡价格，以及保险协商的价格——而最便宜的往往不是患者假设的那个。因为折扣工具同时显示现金和优惠券价格，监测器可以记录每个药房的价格，并标记出折扣价格比标价低的最大幅度。按计划快照，您还可以看到价格随时间变化，这是分析变得有趣的地方：季节性变化、新仿制药进入市场，以及药房因街对面的竞争对手而重新定价。将药品、剂量、形式、药房、邮政编码、价格类型和时间戳存储在每一行中，以保持数据集的清洁和可查询。

[获取地理定位的住宅代理](https://quantumproxies.io/residential-proxies)

## 处理渲染和防护墙

消费者价格网站往往使用JavaScript渲染结果并防范机器人，因为他们的定价就是他们的产品。一个原始请求通常返回一个空壳，并且来自一个IP的频繁轮询会受到挑战。旋转住宅IP加上礼貌的节奏保持监测器运行；当一个网站在客户端渲染或抛出持续挑战时，使用[Scraper API](https://quantumproxies.io/scraper-api)渲染页面并返回结构化数据是更清洁的路径。无论如何保持请求速率温和——这些是与健康相关的服务，成为网站的良好公民是负责任地进行这一操作的一部分。

![药房价格数据的合规界线：一边是公开标示的现金价和折扣价，以及 Medicaid 的 NADAC 等官方数据集，另一边是个人数据；清单保留价格、药房和官方数据集，排除患者记录、处方、理赔以及任何需要登录才能看到的内容。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335219/blog/generated/qp-b9-093-diag2.png)
*明确划定界限：公共广告价格和官方数据集是公平的；患者记录和任何个人数据则不是。*

## 合规界限

在这里，纪律比普通价格抓取更为重要。收集广告的现金和折扣价格、药房名称和位置、药品名称和剂量以及官方公共数据集——所有非个人、公开显示的信息。不要触碰患者记录、处方、保险或索赔数据、登录后的任何内容或与个人相关的健康信息——根据GDPR等法律，这些是个人数据，并且可能是敏感的健康数据。保持您的数据集仅限于价格和药房，汇总而不是跟踪个人，您就会保持在界限内。我们关于[GDPR和抓取个人数据](https://quantumproxies.io/blog/gdpr-web-scraping-personal-data)的指南全面解释了原因。

## 常见问题解答

### 可以抓取处方药价格吗？

在比较和药房网站上公开显示的广告现金和折扣价格可以被收集，许多参考数据作为官方开放数据集发布。重要的限制是合规驱动的：保持在公共、非个人的价格数据上，避免登录后的任何内容，绝不收集关于个人的患者或健康信息。

### 在哪里可以获得官方药品价格数据？

Medicaid发布了NADAC，一个开放的每周更新的药房采购成本数据集，可以通过其数据API查询。几个州运行价格透明工具——佛罗里达州的工具涵盖按县的400种最常用药品。RAND和ASPE发布跨国比较。在抓取任何消费者网站之前，请从这些官方来源开始；它们更清洁且风险更低。

### 为什么药品价格因地区而异？

现金和折扣价格反映了当地药房竞争和协商价格，这些因地区而异，因此同一种药品因邮政编码而价格不同。消费者工具也根据访问者的位置个性化结果。要捕捉真实的差异，请查询多个邮政编码，并使用地理定位的代理将每个请求路由通过匹配地区的住宅出口。

### 药品价格监测需要代理吗？

对于每邮政编码的地理准确性，是的——您需要在您定价的地区拥有出口，这意味着地理定位的住宅代理。它们还可以分散请求，以便计划中的监测不会从一个地址被封锁。像NADAC这样的官方数据集根本不需要代理，因此直接提取这些数据，并将代理保留用于消费者网站的地理数据。

药品价格数据的价值正是因为其变化多端——278%的跨国差距，广泛的每邮政编码差异，超过70,000家药房定价不同。以正确的方式构建管道：首先用尽官方数据集，使用位置定位的住宅代理捕捉地理差异，用Scraper API渲染受保护的网站，并在没有个人数据的公共价格上划定明确界限。这样做，您将在一个合规为重的领域获得一个清洁、可辩护的价格监测数据集。

[使用QuantumProxies开始价格监测](https://quantumproxies.io/residential-proxies)
