如何抓取kw.com芝加哥经纪人页面的652个经纪人链接?
解决动态页面的经纪人链接抓取问题
问题根源:你用
requests.get获取的是静态HTML页面,但该网站的经纪人数据是通过AJAX异步请求加载的,静态页面里根本没有这些经纪人的链接,所以BeautifulSoup找不到目标内容。解决步骤:
- 定位数据接口:打开浏览器开发者工具(按F12),切换到「Network」标签,刷新页面后筛选「XHR」或「Fetch」类型的请求。你会发现有个接口(类似包含
agent/search的地址)返回了经纪人信息的JSON数据,每个条目里都包含经纪人的个人页面链接。 - 分析接口参数:观察请求的参数,比如
page(页码)、location(地区)等,用来分页获取所有652条数据。 - 直接请求API拿数据:不用解析HTML,直接请求这个API接口,解析返回的JSON提取链接即可。
- 定位数据接口:打开浏览器开发者工具(按F12),切换到「Network」标签,刷新页面后筛选「XHR」或「Fetch」类型的请求。你会发现有个接口(类似包含
代码示例:
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
相关产品推荐
相关产品推荐

