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

使用Scrapy爬取Foodpanda时无法获取准确配送费的问题排查

排查Foodpanda新加坡站点配送费爬取不符的思路
  • 核对API请求参数的完整性
    打开浏览器DevTools捕获网页加载时的真实API请求,将其Query参数与你的form_data逐一对比:

    • 检查是否遗漏关键参数,比如currency、postal_code、customer_type等,部分参数可能直接影响配送费计算逻辑;
    • 验证dynamic_pricing参数:当前设为'0',尝试改为'1'或直接移除该参数测试,部分场景下动态定价规则会随参数开关调整返回值。
  • 对齐会话相关请求头与参数

    • dps-session-id:直接复制浏览器请求中的该字段值到爬虫代码中测试,会话ID可能关联地区偏好、动态定价策略,不一致会导致返回数据差异;
    • 补充缺失的请求头:添加浏览器真实的User-Agent、Cookie、Referer、X-Requested-With等字段,尤其是Cookie,即使未登录状态下浏览器也会携带会话Cookie,缺失可能触发不同的定价逻辑。
  • 校验API返回字段的正确性
    查看API返回的JSON数据,确认你提取的配送费字段是否与网页展示一致:

    • 部分商家会返回多个费用字段,比如delivery_fee(基础配送费)、discounted_delivery_fee(折扣后配送费)、service_fee(服务费),需确认网页展示的是哪一项;
    • 检查数值单位:部分API会以“分”为单位返回(如299代表$2.99),若错误将其按“元”处理会导致数值偏差。
  • 细化地理位置参数校验

    • 确保经纬度的字符串格式与浏览器完全一致,比如浏览器传1.4303500,爬虫不要只传1.43035;
    • 若网页请求中包含postal_code参数,需添加到form_data中,Foodpanda可能结合邮编而非仅经纬度计算配送费。
  • 调整请求构造方式
    当前使用scrapy.FormRequest发送GET请求,虽会自动将formdata转为Query参数,但建议改用scrapy.Request直接构造带Query参数的URL,避免格式转换可能的问题:

    import urllib.parse
    
    api_url = 'https://disco.deliveryhero.io/listing/api/v1/pandora/vendors'
    form_data = {
        # 你的参数...
    }
    query_string = urllib.parse.urlencode(form_data)
    full_url = f"{api_url}?{query_string}"
    
    return scrapy.Request(
        full_url,
        headers=headers,
        meta={
            # 你的meta参数...
        },
        callback=self.parse_search
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:40:26