使用BeautifulSoup爬取h2标签调用.text出现AttributeError报错求助
解决方案
报错原因
直接发送无请求头的HTTP请求时,目标网站触发反爬机制,返回的页面结构和浏览器正常访问的结果不一致,导致定位的元素对象为None,调用.text属性时就会抛出该错误。同时使用索引[1]定位h2标签的方式稳定性较差,页面结构稍有变动就会定位失败。
可运行实现代码
import requests from bs4 import BeautifulSoup # 配置请求头伪装浏览器访问,绕过基础反爬 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" } url = 'https://www.ocupacoes.com.br/cbo-mte/251205-economista' resp = requests.get(url, headers=headers) soup = BeautifulSoup(resp.text, 'lxml') # 按文本精准定位目标h2标签 target_h2 = soup.find('h2', string="Descrição Sumária") # 提取h2标题文本 h2_content = target_h2.get_text() # 提取h2后紧邻的正文段落 para_content = target_h2.find_next_sibling('p').get_text(strip=True) print("标题:", h2_content) print("正文:", para_content)
关键逻辑说明
- 添加
User-Agent请求头后,网站会将请求识别为正常浏览器访问,返回完整的正确页面结构 - 采用文本匹配的方式定位h2标签,不受页面内其他h2标签增减的影响,定位稳定性更高
find_next_sibling('p')方法可以直接获取当前h2标签之后的第一个同级p元素,就是你需要的完整正文内容
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

