使用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
相关产品推荐
相关产品推荐

