如何提取与指定兄弟元素相距n个位置的XPath兄弟元素?
提取指定范围内的兄弟元素(XPath + Selenium/Python)
嘿,我来帮你搞定这个XPath提取兄弟元素的问题!你已经用//pre/code拿到了目标元素列表,接下来要提取每个元素前后10个位置内的兄弟,其实用XPath的兄弟轴就能轻松实现,下面给你详细讲怎么操作:
用XPath兄弟轴定位范围兄弟
XPath里有两个专门定位兄弟元素的轴:preceding-sibling(当前元素之前的兄弟)和following-sibling(当前元素之后的兄弟)。要限制在10个位置内,只需要加上position() <=10的条件就行。- 如果要找所有类型的兄弟元素(不管标签是什么),表达式是:
- 前面10个:
./preceding-sibling::*[position() <=10] - 后面10个:
./following-sibling::*[position() <=10]
- 前面10个:
- 如果只想找同标签的
code兄弟(和你当前解析的元素类型一致),把*换成code就行:- 前面10个:
./preceding-sibling::code[position() <=10] - 后面10个:
./following-sibling::code[position() <=10]
- 前面10个:
- 如果要找所有类型的兄弟元素(不管标签是什么),表达式是:
结合Selenium的Python代码示例
你可以遍历已经拿到的code元素列表,对每个元素用相对XPath来获取它的范围兄弟,代码大概是这样:from selenium import webdriver from selenium.webdriver.common.by import By # 初始化浏览器 driver = webdriver.Chrome() driver.get("你的GitHub文档页面URL") # 获取所有目标<code>元素 code_elements = driver.find_elements(By.XPATH, "//pre/code") # 遍历每个元素,提取前后10个兄弟 for idx, code_elem in enumerate(code_elements): # 获取当前元素前10个所有类型的兄弟 preceding_siblings = code_elem.find_elements(By.XPATH, "./preceding-sibling::*[position() <=10]") # 获取当前元素后10个所有类型的兄弟 following_siblings = code_elem.find_elements(By.XPATH, "./following-sibling::*[position() <=10]") # 如果你只想找同标签的code兄弟,替换成下面的写法 # preceding_siblings = code_elem.find_elements(By.XPATH, "./preceding-sibling::code[position() <=10]") # following_siblings = code_elem.find_elements(By.XPATH, "./following-sibling::code[position() <=10]") # 打印结果示例 print(f"第{idx+1}个code元素:") print(f" 前面10个兄弟元素数量:{len(preceding_siblings)}") print(f" 后面10个兄弟元素数量:{len(following_siblings)}") # 关闭浏览器 driver.quit()小提示
XPath里的position()是从紧邻当前元素的那个兄弟开始计数的,比如preceding-sibling::*[1]就是当前元素的前一个直接兄弟,<=10刚好覆盖最近的10个,完全符合你要的“10个位置范围内”的需求。
内容的提问来源于stack exchange,提问作者Sean_Boothby
相关产品推荐
相关产品推荐

