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

Python Selenium网页爬取:如何用XPath获取前2个后续兄弟元素

解决方法

你的代码存在两个核心问题:

  • XPATH语法错误:定位separator元素的表达式//*(@class, 'separator')]写法错误,正确格式应为//*[@class='separator']。
  • 内部查询使用绝对路径://开头的XPATH会从整个文档根节点重新查找,导致每次循环都获取所有separator对应的p元素,而非当前元素的后续兄弟。

修正后的代码方案

可以通过相对路径一次性获取每个separator后的前2个p元素,再提取文本整理成目标格式:

from selenium.webdriver.common.by import By

result = []
# 定位所有class为separator的元素
separators = driver.find_elements(By.XPATH, "//*[@class='separator']")
for sep in separators:
    # 用相对路径查找当前元素之后的前2个p同级元素
    p_elements = sep.find_elements(By.XPATH, "./following-sibling::p[position()<=2]")
    # 提取文本并清理多余的引号和空格
    texts = [p.text.strip().strip('"') for p in p_elements]
    result.append(texts)

print(result)
# 输出结果:[['sometext1', 'someothertext1'], ['sometext2', 'someothertext2']]

关键细节说明

  • ./following-sibling::p:./表示从当前元素(sep)开始定位,following-sibling选取当前元素之后的同级元素,p限定只匹配p标签。
  • [position()<=2]:直接筛选出前2个符合条件的p元素,比分别定位第1、第2个元素更简洁。
  • 文本处理:strip().strip('"')用于去除文本前后的空格和多余引号,匹配你需要的结果格式。

如果需要分别获取第1和第2个元素,也可以这么写:

for sep in separators:
    t1 = sep.find_element(By.XPATH, "./following-sibling::p[1]").text.strip().strip('"')
    t2 = sep.find_element(By.XPATH, "./following-sibling::p[2]").text.strip().strip('"')
    result.append([t1, t2])

注意:若页面存在separator元素后不足2个p的情况,建议使用find_elements(复数形式)避免抛出找不到元素的异常,再根据实际长度做判断处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:45:30