使用Python BeautifulSoup爬取时无法定位同class重复div问题
重复class属性div的定位方案
- 核心问题根源:使用
soup.find()匹配同class元素时,仅会返回页面中第一个符合class条件的节点,因此无法定位到藏有目标数据的第二个同class div;硬回溯父节点的操作会因为页面层级动态变动直接返回None,不属于高稳定性的定位思路 - 正确定位步骤:
- 用
soup.find_all()替换原来的soup.find(),一次性获取页面上所有class="livewire-container"的div节点,存为列表结构 - 从列表中筛选目标div,两种筛选方式任选:
- 固定索引取值:先遍历打印两个节点的文本内容,确认目标数据所在的列表下标,比如目标div在列表第二位就直接取
containers[1] - 内容特征校验:遍历每个节点,判断节点文本中是否存在「GRE」「GMAT」这类目标数据独有关键词,匹配到的即为需要的容器,这种方式不受列表顺序变动影响,容错性更高
- 固定索引取值:先遍历打印两个节点的文本内容,确认目标数据所在的列表下标,比如目标div在列表第二位就直接取
- 用
可直接适配的爬取代码
import requests from bs4 import BeautifulSoup # 配置请求头模拟浏览器访问,避免被网站反爬拦截 request_headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36' } url = 'https://www.clearadmit.com/livewire/' page = requests.get(url, headers=request_headers) soup = BeautifulSoup(page.content, 'html.parser') # 获取所有同class的容器节点 all_livewire_containers = soup.find_all('div', class_='livewire-container') target_container = None # 按内容特征筛选目标容器 for container in all_livewire_containers: if 'GRE' in container.get_text() and 'GMAT' in container.get_text(): target_container = container break # 从目标容器中逐条目提取需要的四个字段 extracted_data = [] # 按页面实际的列表选择器定位每一条录取记录,根据实际结构调整类名即可 for record in target_container.select('div.livewire-row'): data_row = { 'school_name': record.select_one('div.school-name').get_text(strip=True), 'admission_status': record.select_one('div.status-tag').get_text(strip=True), 'gre_score': record.select_one('span.gre-score').get_text(strip=True) if record.select_one('span.gre-score') else '未公示', 'gmat_score': record.select_one('span.gmat-score').get_text(strip=True) if record.select_one('span.gmat-score') else '未公示' } extracted_data.append(data_row)
实操避坑提示
- 不要执着于回溯父节点定位子元素:网站后续更新页面结构时,父节点的层级、class属性都可能变动,基于内容特征、目标元素自身class的定位逻辑,维护成本更低
- 如果代码返回None,优先校验接口请求状态:如果
page.status_code返回403/401,说明是被反爬拦截而非定位逻辑错误,补全请求头、对应cookie即可解决 - class匹配可以直接用
class_='类名'的写法,比手写attrs={'class':'类名'}更简洁,也不会触发Python关键字冲突
内容的提问来源于stack exchange,提问作者Aytida
相关产品推荐
相关产品推荐

