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

如何用Selenium正确爬取页面中深度嵌套的职位元素?

解决职位头衔爬取重复问题的方案

问题根源

你循环中使用的绝对XPATH(//开头)会每次从整个HTML文档的根节点开始搜索,所以不管循环到哪个row,都会返回文档中第一个匹配的头衔元素,导致结果重复。

修正方案:使用相对XPATH

将内部查找的XPATH改为相对路径(以.//开头),这样会限定在当前row元素的子节点范围内搜索:

jobs = []
for row in checked:
    # 用.//开头,限定在当前row下查找目标span
    title_element = row.find_element(By.XPATH, './/div/div[2]/div/div[2]/span[2]')
    jobs.append({
        'info': title_element.text
    })
print(jobs)

如果想更精准匹配头衔关键词,也可以用条件筛选:

title_element = row.find_element(By.XPATH, './/span[contains(text(), "Analyst") or contains(text(), "Vice President") or contains(text(), "Associate")]')

更简洁的方案:直接定位所有头衔元素

不需要先定位职位卡片再循环,直接用一个XPATH获取所有头衔元素,减少层级操作:

# 等待所有头衔元素加载完成
titles = wait.until(
    EC.presence_of_all_elements_located(
        (By.XPATH, '//*[@id="__next"]/main/div/div[2]/div/div/div[2]/div/div[2]/div/div/div[2]/div//div/div[2]/div/div[2]/span[2]')
    )
)

jobs = [{'info': title.text} for title in titles]
print(jobs)

CSS选择器替代方案

即使类名通用,也可以通过元素结构层级定位:

titles = wait.until(
    EC.presence_of_all_elements_located(
        (By.CSS_SELECTOR, '#__next main > div > div:nth-child(2) > div > div > div:nth-child(2) > div > div:nth-child(2) > div > div > div:nth-child(2) > div div:nth-child(2) > div:nth-child(2) > span:nth-child(2)')
    )
)
jobs = [{'info': t.text} for t in titles]

小技巧:可以用浏览器开发者工具(F12)右键目标头衔元素,复制相对XPATH或CSS选择器,避免手动编写复杂路径出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:33:23