Python Web Scraping求助:使用BeautifulSoup提取href属性报错
解决BeautifulSoup提取href属性的错误
你的代码报错核心原因有两个:
site_html.find_all('h4')返回的是结果列表,列表没有get()方法,不能直接调用该方法获取属性。- href属性属于
<h4>内部的<a>标签,而非<h4>标签本身。
修正后的代码示例
首先补全必要的导入语句:
import requests from bs4 import BeautifulSoup
方法一:遍历h4标签,逐个提取内部a标签的href
request = requests.get('https://www.eloscimento.com.br') site_html = BeautifulSoup(request.text, 'html.parser') # 获取所有h4标签(返回列表) h4_list = site_html.find_all('h4') # 遍历每个h4标签 for h4 in h4_list: # 查找当前h4下的a标签 a_tag = h4.find('a') # 确保a标签存在,避免报错 if a_tag: href = a_tag.get('href') print(href)
方法二:直接定位h4下的a标签(更高效)
用CSS选择器直接选中所有h4的直接子元素a标签:
request = requests.get('https://www.eloscimento.com.br') site_html = BeautifulSoup(request.text, 'html.parser') # 直接获取所有h4内部的a标签 a_tags = site_html.select('h4 > a') for a in a_tags: href = a.get('href') print(href)
关键说明
find_all()返回的是多个元素组成的列表,必须遍历每个元素才能处理。get('href')方法用于从标签对象中提取属性值,也可以用a_tag['href'],但get()会在属性不存在时返回None,避免抛出异常。- CSS选择器
select()可以更精准地定位元素,适合复杂的层级结构查询。
内容的提问来源于stack exchange,提问作者Hélder Neves
相关产品推荐
相关产品推荐

