如何用BeautifulSoup提取同div相同class下的CDI与London两个元素
解决方法
核心思路是利用你发现的i标签name属性差异做精准定位,再获取相邻的内容节点即可,具体代码示例如下:
基础直接提取版本
# 提取London地点 location_i = soup.find("i", attrs={"name": "location"}) london = location_i.find_next("span", class_="sc-1qc42fc-2").get_text(strip=True) # 提取CDI合同类型 contract_i = soup.find("i", attrs={"name": "contract"}) cdi = contract_i.find_next("span", class_="sc-1qc42fc-2").get_text(strip=True)
代码说明:
soup.find("i", attrs={"name": "location"})精准命中代表地点的i标签,完全避开class重复的干扰- 调用
find_next方法找到该i标签之后第一个存储内容的span节点 get_text(strip=True)会自动清除文本首尾的空白、 等特殊空格字符,拿到干净的结果
异常兼容版本
如果担心页面结构变动导致节点不存在触发报错,可以封装成通用提取函数做兼容:
def extract_field(soup, i_name): target_i = soup.find("i", attrs={"name": i_name}) if not target_i: return None content_span = target_i.find_next("span", class_="sc-1qc42fc-2") return content_span.get_text(strip=True) if content_span else None # 调用函数提取两个字段 london = extract_field(soup, "location") cdi = extract_field(soup, "contract")
内容的提问来源于stack exchange,提问作者Hichhich
相关产品推荐
相关产品推荐

