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

如何抓取kw.com芝加哥经纪人页面的652个经纪人链接?

解决动态页面的经纪人链接抓取问题
  • 问题根源:你用requests.get获取的是静态HTML页面,但该网站的经纪人数据是通过AJAX异步请求加载的,静态页面里根本没有这些经纪人的链接,所以BeautifulSoup找不到目标内容。

  • 解决步骤:

    1. 定位数据接口:打开浏览器开发者工具(按F12),切换到「Network」标签,刷新页面后筛选「XHR」或「Fetch」类型的请求。你会发现有个接口(类似包含agent/search的地址)返回了经纪人信息的JSON数据,每个条目里都包含经纪人的个人页面链接。
    2. 分析接口参数:观察请求的参数,比如page(页码)、location(地区)等,用来分页获取所有652条数据。
    3. 直接请求API拿数据:不用解析HTML,直接请求这个API接口,解析返回的JSON提取链接即可。
  • 代码示例:

import requests

# 替换为你通过开发者工具找到的实际API接口地址
api_url = "https://kw.com/api/agent/search"
headers = {
    # 复制浏览器请求头里的User-Agent,避免被网站拦截
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

all_agent_links = []
page = 1
per_page = 20  # 按接口实际返回的每页条数调整

while True:
    params = {
        "location": "IL/Chicago",
        "page": page,
        "size": per_page
        # 其他必要参数从浏览器请求里复制
    }
    response = requests.get(api_url, headers=headers, params=params)
    data = response.json()
    
    # 根据实际JSON结构提取经纪人链接,键名可能是profileUrl/url等
    current_page_agents = data.get("data", {}).get("agents", [])
    if not current_page_agents:
        break  # 无数据时停止循环
    
    for agent in current_page_agents:
        agent_link = agent.get("profileUrl")
        if agent_link:
            # 补全相对链接的域名
            if not agent_link.startswith("http"):
                agent_link = f"https://kw.com{agent_link}"
            all_agent_links.append(agent_link)
    
    page += 1
    if len(all_agent_links) >= 652:
        break

# 输出结果
for link in all_agent_links:
    print(link)
print(f"共抓取到{len(all_agent_links)}个经纪人链接")
  • 注意事项:
    • 必须带上浏览器的User-Agent,否则大概率会被网站拦截。
    • 接口的参数和返回结构可能会变动,需要你自己通过开发者工具确认准确的字段名。
    • 如果遇到请求频繁被限制,可添加time.sleep(1)做请求延迟,或者使用代理IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:31:02