使用BeautifulSoup查找flex容器内span标签返回None该如何解决
问题根因
- 目标站点有基础反爬机制,直接使用
requests发起默认请求会被识别为爬虫,返回的并非正常渲染的商品列表页面,因此soup对象中不存在目标price类标签,查询自然返回None。 - 可选优化点:Python内置的
html.parser解析容错率较低,部分不规范的HTML结构可能解析不全,可替换为lxml解析器提升解析效果。
修复步骤
- 给请求添加符合浏览器特征的
User-Agent请求头,伪装成正常浏览器访问 - 可以先打印返回的状态码和响应文本验证是否拿到了正常页面,确认内容正确后再做解析
- 可选:提前安装
lxml库替换默认的html.parser解析器
修复后可运行代码
import requests from bs4 import BeautifulSoup as bs URL = "https://geizhals.de/?cat=gra16_512&xf=9816_03+05+16+-+RTX+3090" # 添加请求头伪装浏览器 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } r = requests.get(URL, headers=headers) # 可先打印状态码确认请求是否成功 print(r.status_code) # 用lxml解析,需要提前执行pip install lxml安装依赖 soup = bs(r.content, 'lxml') s = soup.find('span', attrs={'class': 'price'}) print(s)
额外注意
如果添加UA后还是拿不到内容,可能站点还有其他反爬校验,比如需要携带Cookie、验证人机等,你可以清理测试环境的请求记录后多试几次。
内容的提问来源于stack exchange,提问作者Minplex
相关产品推荐
相关产品推荐

