Python中如何查找class元素?网页抓取提取数值遇问题求助
解决Python网页抓取提取数字的问题
嘿,我来帮你搞定这个网页抓取的问题~你的代码里主要是CSS选择器用错了,咱们一步步来修正:
问题分析
你目标元素是 <span class="status ng-binding"> 14 </span>,但你的代码写了 soup.select("#status ng-binding"),这里有两个关键错误:
#status是选择id为status的元素,但你的元素是class为status,应该用.status(点号对应class选择器)- 空格分隔的
ng-binding表示选择status元素的后代里的ng-binding元素,但这两个class是属于同一个span的,正确写法是把两个class连起来:.status.ng-binding
修正后的代码
import requests import bs4 headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'} res = requests.get('https://gleam.io/cevFk/castrio-october-streaming-pc-giveaway?gsr=cevFk-SxAtZtT4Ir', headers=headers) res.raise_for_status() # 新增:检查请求是否成功,避免后续处理错误的页面内容 soup = bs4.BeautifulSoup(res.text, 'html.parser') # 用select_one直接获取匹配的第一个元素,比select返回列表更方便 target_span = soup.select_one(".status.ng-binding") if target_span: # 提取文本并去除前后空格,得到干净的数字 extracted_number = target_span.get_text(strip=True) print(f"成功提取到数字:{extracted_number}") else: print("未找到目标元素,请检查页面结构是否变化,或者选择器是否正确")
额外小Tips
- 如果这个页面里只有一个class为
status的span,你也可以简化选择器为.status,效果是一样的 res.raise_for_status()很有用,能帮你快速发现请求失败的问题(比如404、500错误)- 用
get_text(strip=True)可以自动去掉文本前后的空格,避免拿到带空格的" 14 "
内容的提问来源于stack exchange,提问作者nitro.
相关产品推荐
相关产品推荐

