网页抓取问题:已获取.external-link元素,无法抓取其前置信息
网页抓取:获取姓名前方的对应信息
问题背景
- 正在抓取巴西众议院制宪会议参议员成员页面,已通过选择器
.external-link成功提取姓名(对应图中黄色圈选内容),但无法获取姓名前方的目标信息(对应图中红色圈选内容)。
解决方案
1. 先分析DOM结构
打开浏览器开发者工具,查看姓名元素(.external-link)与目标信息的层级关系:
- 多数情况下,两者会被包裹在同一个父容器(如
<li>、<div>或<span>)内; - 目标信息可能是姓名元素的前置兄弟节点,或是父容器内的文本片段。
2. 针对性提取代码示例(以Python+BeautifulSoup为例)
情况1:目标信息与姓名在同一父容器的文本中
如果父容器文本格式为「目标信息 - 姓名」,可直接拆分文本:
from bs4 import BeautifulSoup import requests url = "目标网站的URL" resp = requests.get(url) soup = BeautifulSoup(resp.text, "html.parser") for link in soup.select(".external-link"): parent_text = link.parent.get_text(strip=True) # 按分隔符拆分,提取目标信息和姓名 prefix_info, name = parent_text.split(" - ", 1) print(f"前置信息: {prefix_info}, 姓名: {name}")
情况2:目标信息是独立的前置兄弟节点
如果目标信息是单独的元素节点,使用previous_sibling定位:
for link in soup.select(".external-link"): prefix_element = link.previous_sibling if prefix_element: prefix_info = prefix_element.strip() name = link.get_text(strip=True) print(f"前置信息: {prefix_info}, 姓名: {name}")
3. 补充说明
如果目标信息是CSS伪元素(如::before),则需要从页面的CSS样式中提取,或使用浏览器渲染引擎(如Selenium)获取渲染后的文本。
内容的提问来源于stack exchange,提问作者Lucas Esteves
相关产品推荐
相关产品推荐

