You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Weedmaps抓取药房菜单的菌株、数量及价格数据

解决Weedmaps药房菜单数据抓取的思路

首先,你遇到的问题特别典型——这类现代网站的数据基本都是动态加载的:页面HTML只会渲染基础框架,真正的菜单数据是浏览器加载完页面后,通过AJAX请求从后端API拉取,再动态渲染到页面上的,所以直接看页面源码肯定找不到这些内容。

下面是亲测有效的解决步骤:

  • 第一步:定位数据接口
    打开浏览器开发者工具(按F12切换到「Network」标签),刷新目标药房页面。在「Filter」栏选择「XHR」或「Fetch」,过滤出动态请求的接口。你可以重点找带「menu」「product」「strain」这类关键词的请求,点进去看「Response」标签,如果返回的是结构化JSON数据,且包含菌株、价格等信息,那就是你要找的目标接口了。

  • 第二步:分析API结构
    找到接口后,重点看这几个部分:

    • 请求URL里一般会包含药房的唯一ID(比如/api/v1/dispensaries/{dispensary_id}/menu),这个ID可以从页面URL或者页面源码的meta标签里提取;
    • 返回的JSON中,菌株名称可能在data[].name或data[].strain.name字段下;产品数量可以直接统计对应分类下的数组长度;价格通常在data[].prices或data[].variants[].price里,注意不同规格(比如1g、3g)的价格会分开存储。
  • 第三步:模拟API请求
    用你熟悉的爬虫工具(比如Python的requests库)模拟发送请求,记得带上必要的请求头(比如User-Agent、Accept,部分网站可能需要Cookie或Authorization令牌,这些都能从开发者工具的「Request Headers」里复制)。举个简单的Python示例:

    import requests
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
        'Accept': 'application/json'
    }
    api_url = "https://api.weedmaps.com/api/v1/dispensaries/xxx/menu"  # 替换为你找到的真实API地址
    response = requests.get(api_url, headers=headers)
    menu_data = response.json()
    
    # 提取目标数据示例
    for product in menu_data['data']['products']:
        strain_name = product.get('strain', {}).get('name', '未知菌株')
        product_spec_count = len(product.get('variants', []))
        spec_prices = [variant['price'] for variant in product.get('variants', [])]
        print(f"菌株名称: {strain_name}, 规格数量: {product_spec_count}, 对应价格: {spec_prices}")
    
  • 第四步:应对反爬限制
    Weedmaps有反爬机制,频繁请求容易被封IP或返回403。建议:

    • 给请求加上1-3秒的随机延迟;
    • 用代理IP轮换请求;
    • 尽量模拟真实用户的浏览节奏,不要一次性批量请求大量数据。

内容的提问来源于stack exchange,提问作者Sam Skinner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:50:01