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 € et 46K €</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
相关产品推荐
相关产品推荐

