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

如何抓取滚动加载的JustDial医生数据?仅需姓名、地址、电话

最优抓取方案分析与实现思路

方案一:破解AJAX请求参数规律(推荐)

JustDial的滚动加载本质是触发AJAX POST请求,参数看似动态变化但大多存在固定规律,你可以按以下步骤拆解:

  • 打开浏览器开发者工具(F12),切换到Network标签,筛选XHR/fetch请求。
  • 滚动页面加载新数据,定位加载列表的POST请求(通常URL包含search_result.php类关键词)。
  • 拆解请求参数:
    • 固定参数:city(Mumbai)、cat_id(对应nct-10892680的分类ID)、limit(固定为10)这类参数不会变化。
    • 动态参数:start(起始条目索引,第一次为0,第二次为10,第三次为20……)、page(对应start/limit的页码)是核心动态参数;部分如session_id的参数,可在首次请求后复用,无需频繁更换。
  • 验证规律:手动修改start参数值(比如设为20)发送请求,确认是否返回第21-30条数据,验证规律后即可批量构造请求。
  • 代码实现逻辑:
    1. 先发送初始请求,获取必要的Cookie或会话信息。
    2. 循环构造start参数(0、10、20……),发送POST请求,解析返回的JSON/HTML数据,提取姓名、地址、电话。
    3. 当请求返回数据为空或条目数不足10条时,停止循环。

方案二:优化Selenium滚动加载(备选)

如果AJAX参数破解遇到阻碍,可通过优化Selenium逻辑降低耗时:

  • 直接执行JS脚本滚动到页面底部,替代手动逐次滚动:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
  • 用WebDriverWait等待新元素加载,替代固定sleep,减少无效等待时间:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        # 等待页面高度变化,确认新数据加载完成
        WebDriverWait(driver, 10).until(
            lambda d: d.execute_script("return document.body.scrollHeight") > last_height
        )
        last_height = driver.execute_script("return document.body.scrollHeight")
        # 提取当前页面所有已加载的医生数据
        # 若滚动后页面高度不再变化,判定为加载完成,退出循环
    
  • 提取数据时,用集合存储已抓取的电话或姓名,避免重复采集。

关键注意事项

  • 两种方案都需设置1-2秒的请求间隔,避免触发网站反爬机制。
  • 抓取电话号码时,若遇到图片格式的号码,需配合OCR工具识别;若为JS动态渲染,需提取对应JS变量或解析渲染后的文本。
  • 遵守网站robots.txt规则,避免过度请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:52:16