使用BeautifulSoup抓取realtor.com房产代理个人页href并存入字典的问题
房产代理列表页爬虫提取优化指南
当前实现存在的核心问题
- 选择器适配失效:原链接选择器写死了
nth-child(1)的位置规则,仅能匹配列表中第一个代理对应的元素,无法遍历所有代理条目,根本无法定位后续条目的目标链接 - 元素匹配错位风险:原代码分别独立提取姓名、电话两个列表,再通过
zip绑定对应关系,一旦任意一个字段选择出现偏移,就会出现不同代理的信息错配 - 选择器稳定性不足:依赖
jsx-开头的哈希类名拼接层级路径,这类类名是前端构建过程中生成的动态值,网站版本更新后极易失效
可落地的修正方案
核心思路调整为:先定位每个代理的独立最小卡片容器,再从容器内部依次提取所有目标字段,彻底避免跨层级选择带来的错位、失效问题
- 卡片容器定位:优先选择带固定业务语义的类名元素(即不包含动态哈希
jsx-前缀的类名,如agent-list-card这类和业务逻辑绑定的固定类),一次拿到所有代理对应的独立卡片列表 - 单卡片内字段提取:对每个拿到的卡片,在自身DOM范围内匹配对应字段:
- 提取代理姓名文本
- 提取代理联系电话文本
- 提取卡片内a标签的
href属性,补充站点域名前缀后得到完整的个人主页链接
- 数据存储调整:不再以姓名为key存单个电话值,而是将每个代理的姓名、电话、主页链接组成子结构存入
realtors_data,信息关联关系更清晰
修正后的可运行代码
from bs4 import BeautifulSoup import requests import numpy as np import pandas as pd realtors_data = {} # 伪装请求头避免被站点反爬拦截 headers = { "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" } pages = np.arange(1, 2, 1) print("PAGES: ", pages) # 每个代理的独立卡片选择器,优先选固定业务类 card_selector = "ul > div.agent-list-card" for page in pages: resp = requests.get( "https://www.realtor.com/realestateagents/New-Orleans_LA/pg-" + str(page), headers=headers ) soup = BeautifulSoup(resp.text, 'html.parser') # 拿到所有独立代理卡片 agent_cards = soup.select(card_selector) for card in agent_cards: # 从卡片内提取姓名 name_tag = card.select_one("div > div > div > div > div > a > div") name = name_tag.get_text(strip=True) if name_tag else "未知代理" # 从卡片内提取电话 phone_tag = card.select_one("div > div > div > div > div > div.agent-phone") phone = phone_tag.get_text(strip=True) if phone_tag else "暂无联系电话" # 从卡片内提取个人主页链接,拼接完整域名 link_tag = card.select_one("div.agent-list-card-img-wrapper > a") agent_link = "https://www.realtor.com" + link_tag["href"] if link_tag else "暂无主页链接" # 存入字典,每个代理的信息为子字典结构 realtors_data[name] = { "phone": phone, "profile_link": agent_link } # 输出最终结果 print(realtors_data)
关键注意事项
- 不要在选择器中使用写死的位置规则(如
nth-child(1)),这类规则会随着页面结构调整快速失效 - 尽量避开动态生成的
jsx-类名,优先选择带明确业务语义的固定类名,大幅提升选择器的长期稳定性 - 提取DOM属性时增加空值判断,避免页面缺失某类元素时直接抛出空指针错误
内容的提问来源于stack exchange,提问作者Preston G
相关产品推荐
相关产品推荐

