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

使用Python Selenium爬取Hemnet网站时无法正确获取列表超链接的问题求助

问题原因
  • 你当前遍历的result列表中每个元素都是<div class="sold-property-listing">节点,包含目标超链接的<a>标签是该div的直接父节点,不属于div的内部子元素,所以你在div内部通过class、CSS选择器查找a元素都会匹配失败
  • 之前使用XPATH始终返回同一房源链接,是因为你写的XPATH没有加.前缀,默认从整个页面的根节点开始搜索,每次循环都返回全页第一个匹配的元素;带序号的XPATH受页面加载顺序、动态内容影响,稳定性极低。
解决方案

提供两种可直接复用的实现方式:

方案1:基于现有遍历逻辑,直接获取父节点的链接

不需要修改现有遍历逻辑,在循环内添加如下代码提取超链接:

for r in result:
    try:
        # 开头的.表示限定搜索范围为当前r元素的周边
        # ./.. 表示查找当前元素的直接父节点,也就是包含href的a标签
        link = r.find_element(By.XPATH, "./..").get_attribute("href")
    except:
        link = "Missing"
    # 原有其他字段提取逻辑保持不变
    try:
        location = r.find_element(By.CLASS_NAME,"sold-property-listing__location")
    except:
        location = 'Missing'

方案2:直接遍历a标签节点,简化逻辑

直接将所有房源对应的a标签作为遍历目标,一次性获取链接和内部字段,逻辑更简洁:

# 替换原有的result获取代码,直接取a标签节点
results = driver.find_elements(By.CLASS_NAME, "hcl-card")
for res in results:
    # 直接提取超链接
    try:
        link = res.get_attribute("href")
    except:
        link = "Missing"
    # 提取内部其他字段,和原有逻辑一致
    try:
        location = res.find_element(By.CLASS_NAME,"sold-property-listing__location")
    except:
        location = 'Missing'
    # 其他字段提取逻辑保持不变
注意事项
  • 所有在循环内使用的XPATH必须加.前缀,限定搜索范围为当前遍历节点的内部或周边,避免全局搜索导致的匹配错误
  • 不要使用带固定序号的XPATH(比如//li[3]/a这类写法),页面动态加载、结构微调都会导致匹配失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:15:08