如何用BeautifulSoup提取空class的span标签内的文本?
问题:提取空class的span标签内的数字内容
我是Python新手,正在学习Python并做个人项目,现在遇到技术问题:需要从<span class=""><b>0</b>标签中提取数字0,但因为该span标签的class为空,试了多种代码都没法获取到对应内容。
当前代码
import requests r = requests.get("link allowed to write?") from bs4 import BeautifulSoup doc=BeautifulSoup(r.text, "html.parser") for i in doc.select(".no-change"): for a in i.select(".dib"): print(a.find_all('span', class_=''))
运行输出
[<span class=""> <b class="bg-green">2</b> <span>S</span> </span>, <span>S</span>, <span class=""> <b>0</b> <span>U</span> </span>, <span>U</span>, <span class=""> <b class="bg-red">1</b> <span>N</span> </span>, <span>N</span>, <span> <span class="icon-ball fs15 pr0 pl10" title="Torverhältniss"> </span> <span>5:5</span> </span>, <span>5:5</span>]
期望实现
示例代码
import requests r = requests.get(" -- ") from bs4 import BeautifulSoup doc=BeautifulSoup(r.text, "html.parser") print(doc.select_one(".bg-green").text)
期望输出
2
我已经尝试了多种代码,希望能得到可行的解决方案。
解决方案
从你的输出结果可以看到,目标数字0在空class的span标签下的无class属性的b标签里,你可以通过以下两种方式提取:
方法1:精准定位目标元素
利用CSS选择器直接定位到符合条件的元素,一步提取文本:
import requests from bs4 import BeautifulSoup r = requests.get("你的目标链接") doc = BeautifulSoup(r.text, "html.parser") # 选择.no-change下的.dib元素内、空class的span,且该span包含无class的b标签 target_b = doc.select_one(".no-change .dib span[class=''] > b:not([class])") if target_b: print(target_b.text) # 输出:0
方法2:遍历筛选
如果需要处理多个类似元素,可以遍历所有空class的span,筛选出符合条件的b标签:
import requests from bs4 import BeautifulSoup r = requests.get("你的目标链接") doc = BeautifulSoup(r.text, "html.parser") # 遍历所有符合层级的空class span for span in doc.select(".no-change .dib span[class='']"): b_tag = span.find("b") # 筛选出没有class属性的b标签(对应数字0的情况) if b_tag and not b_tag.get("class"): print(b_tag.text) # 输出:0
说明
你之前的代码只是找到了空class的span标签,但没有进一步提取其中的b标签文本。上面的两种方法都是先定位到包含目标数字的b标签,再获取其.text内容。
内容的提问来源于stack exchange,提问作者Süle
相关产品推荐
相关产品推荐

