如何使用BeautifulSoup提取网站中的href链接?附问题代码排查
原有代码问题说明
你写的代码存在两处核心错误:
- 定位到的
div.exbox-body元素本身没有href属性,href是该div内部嵌套的a标签的属性,直接提取会触发KeyError - 没有做请求有效性校验和属性存在性校验,容错性极低,容易触发异常中断程序
修正后可运行代码
from bs4 import BeautifulSoup import requests # 新增浏览器请求头,避免被网站反爬拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } res = requests.get('http://smartcatalog.emo-milano.com/it/catalogo/elenco-alfabetico/400/A', headers=headers) # 先校验请求是否成功 if res.status_code == 200: soup = BeautifulSoup(res.text, 'lxml') # 直接定位到div下带href属性的a标签 link_list = soup.select('div.exbox-body a') for a_tag in link_list: # 用get方法提取属性,属性不存在时返回None不会报错 url = a_tag.get('href') if url: print(url) else: print(f'请求失败,状态码:{res.status_code}')
修改点说明
- 新增请求头模拟浏览器访问,规避绝大多数基础反爬拦截
- 增加请求状态码校验,只有请求成功才会执行后续解析逻辑
- 调整元素定位规则,直接提取目标div下的a标签,从a标签上获取href属性
- 使用
get方法提取属性,配合空值过滤逻辑,避免属性缺失导致程序崩溃
内容的提问来源于stack exchange,提问作者Arslan Aziz
相关产品推荐
相关产品推荐

