使用BeautifulSoup find_all()匹配多class元素时结果不符合预期的问题求助
使用BeautifulSoup find_all()匹配多class元素时结果不符合预期的问题求助
大家好,我最近在用BeautifulSoup处理网页抓取时遇到了棘手的问题,折腾了半天没找到原因,来请教下各位大佬。
我的需求很明确:抓取网页中所有带有inline-block w-[30px] px-2类的<span>元素里的数字。在目标网页里,这类元素的结构是这样的:
<span class="inline-block w-[30px] px-2">1</span>
而且这样的元素明明有35个,我预期能抓到全部35个元素,然后逐个输出里面的数字。
但我写的代码运行结果完全不对,先贴一下我的代码:
import requests from bs4 import BeautifulSoup url = "https://curiosa.io/decks/cmbcn15x3003cl704euvw894m" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # 尝试匹配多class的写法 cards = soup.find_all(class_ = ["inline-block", "w-[30px]", "px-2"]) print("length of cards: " + str(len(cards))) for card in cards: num = card.get_text() print(f"{num}") print("test") print("test")
实际运行后出现的问题:
cards的长度只有3,完全不是预期的35- 调用
card.get_text()也输出不了预期的数字,没有任何有效内容打印出来
我还尝试过更精确的写法,指定标签为span:
cards = soup.find_all("span", class_ = ["inline-block", "w-[30px]", "px-2"])
结果更糟,cards的长度直接变成0,一个元素都抓不到。
我现在甚至不确定是不是多class的匹配写法出了问题,但网页里明明白白有35个带有inline-block w-[30px] px-2类的元素,代码就是识别不到,真的搞不懂哪里错了,希望各位能帮我看看问题出在哪,谢谢!
内容来源于stack exchange
相关产品推荐
相关产品推荐

