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

Selenium+Python爬招聘网站:无法获取Emoji对应信息的问题

问题:Selenium爬取招聘网站时无法通过Emoji节点获取对应文本内容

爬取某招聘网站「职位摘要」板块时,所有信息为非必填项,缺失项会被后续内容填补位置,因此需要通过信息前Emoji的name属性识别信息类型。但当前无法获取Emoji对应的文本内容,文本实际存储在Emoji父节点的下一个兄弟节点中。

对应HTML结构

<li class="sc-16yjgsd-0 haea-DT">
<span role="img" class="sc-16yjgsd-1 cnWfGH">
<i class="sc-ACYlI bCYQRQ  wui-icon-font" name="salary"></i></span>
<span class="sc-16yjgsd-3 bCCdzk">Salaire entre 40,5K&nbsp;€ et 46K&nbsp;€</span></li>

尝试的错误代码

jobinfos = {"salary": [], "location": [], 'contract' : [], 'contract' : [], 'suitcase' : []}
for i in links[0:4]:
    driver.get(i)
    jobsummary = driver.find_element_by_xpath("//*[@id='prc-1-1-1']/main/div[1]/div/div[1]/div[2]/ul")
    emoji_elements = jobsummary.find_elements_by_xpath("/html/body/div[1]/div[1]/div/div/div/div/main/div[1]/div/div[1]/div[2]/ul/li[1]/span[1]/i")
    print("Number of emoji elements found:", len(emoji_elements))
    
    for emoji_element in emoji_elements:
        emoji_type = emoji_element.get_attribute("name")
        print(emoji_type)
        info_element = emoji_element.find_element_by_xpath("..//i[@name='{}']/following-sibling::i").format(emoji_type)
        info = info_element.text
        jobinfos[emoji_type].append(info)

运行后提示无法定位后续兄弟节点,问题出在两处:

  • emoji_elements的XPath使用了绝对路径且限定了li[1],只能获取第一个列表项中的Emoji,无法遍历所有职位摘要项;
  • 获取文本的XPath逻辑错误:目标文本在Emoji所在<span>的下一个兄弟<span>中,而非<i>的兄弟<i>。

修正后的代码

jobinfos = {"salary": [], "location": [], 'contract': [], 'suitcase': []}
# 原字典重复定义了'contract',已删除重复项
for i in links[0:4]:
    driver.get(i)
    jobsummary = driver.find_element_by_xpath("//*[@id='prc-1-1-1']/main/div[1]/div/div[1]/div[2]/ul")
    # 使用相对路径查找所有li下的Emoji节点
    emoji_elements = jobsummary.find_elements_by_xpath(".//li/span[1]/i")
    print("Number of emoji elements found:", len(emoji_elements))
    
    for emoji_element in emoji_elements:
        emoji_type = emoji_element.get_attribute("name")
        print(emoji_type)
        # 先找到当前i的父span,再获取其下一个兄弟span(即文本所在节点)
        info_element = emoji_element.find_element_by_xpath("../following-sibling::span")
        info = info_element.text
        # 判断字典中存在该key再添加,避免键不存在报错
        if emoji_type in jobinfos:
            jobinfos[emoji_type].append(info)

关键修正点

  • 使用相对路径.//li/span[1]/i从jobsummary节点出发,遍历所有职位摘要项中的Emoji;
  • 通过../following-sibling::span定位到文本节点:../表示回到当前<i>的父节点<span>,following-sibling::span选择该节点的下一个兄弟<span>;
  • 增加了字典key存在性判断,避免因未知name值导致的KeyError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:37:34