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

如何用Selenium和Python定位无值属性元素?Indeed地址提取

解决Indeed爬取中空class地址div的定位问题

一、优化XPath定位(精准过滤干扰项)

之前用//div[@class=""]返回多余内容,核心是没结合上下文缩小范围。结合Indeed页面的常见结构,试试这些写法:

  1. 结合职位容器+地址文本特征
    假设地址所在的职位卡片有固定class(比如job_seen_beacon),且地址文本包含逗号(如Bergamo, Lombardia),用这个XPath精准筛选:
    //div[contains(@class, "job_seen_beacon")]//div[@class="" and contains(text(), ", ")]
    
  2. 利用相邻元素关联定位
    如果地址div紧邻公司名称div(公司名称class通常是companyName),可以通过兄弟节点定位:
    //div[@class="companyName"]/following-sibling::div[@class=""]
    

二、CSS选择器方案

针对空class的div,CSS可以用div:not([class]),但同样要结合父容器限制范围:

.job_seen_beacon div:not([class])

如果需要进一步过滤地址文本,Selenium可以先获取元素列表,再通过文本特征筛选:

from selenium.webdriver.common.by import By

address_elements = driver.find_elements(By.CSS_SELECTOR, ".job_seen_beacon div:not([class])")
for elem in address_elements:
    addr_text = elem.text.strip()
    if ", " in addr_text:
        print(addr_text)
        break

三、通过父容器遍历子元素(By.TAG_NAME)

如果前面的方法都受限,可以先定位职位卡片,再遍历内部div,通过文本格式判断地址:

job_cards = driver.find_elements(By.CLASS_NAME, "job_seen_beacon")
for card in job_cards:
    # 遍历卡片内所有div
    all_divs = card.find_elements(By.TAG_NAME, "div")
    for div in all_divs:
        text = div.text.strip()
        # 地址通常包含逗号,且长度符合地区格式
        if ", " in text and 5 < len(text) < 50:
            print(f"提取到地址:{text}")
            break

为什么之前的方法失效?

  • //div[2]/div:路径太泛,页面动态加载时元素位置会变化,无法稳定定位。
  • //div[@class=""]:页面中空class的div数量多,没有上下文过滤就会返回大量无关内容。
  • 绝对路径:Indeed页面结构经常调整,绝对路径会随页面更新失效,属于反模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:12:57