如何用 BeautifulSoup 查找指定 class 的 div 并解决返回空列表问题
空列表的原因
find_all的第一个参数只接受标签名,原代码把div class="xxx"整段字符串作为标签名传入,库会查找名称完全等于这段字符串的标签,自然匹配不到结果。- 第二个参数误传入了BeautifulSoup实例本身,该位置本应接收属性筛选规则,传参逻辑不符合API要求。
- 注意:
class是Python保留关键字,BeautifulSoup筛选class属性需要使用专用参数class_,不能直接写class=。
正确实现
首先导入依赖:
from bs4 import BeautifulSoup
完整查询代码(推荐用with管理文件,自动处理开关闭):
with open('WarpipsPageText.txt', 'r') as f: page_text = f.read() soup = BeautifulSoup(page_text, 'html5lib') # 按标签名+class筛选目标元素 merchant_divs = soup.find_all('div', class_='topclick-list-element-game-merchant') print(merchant_divs)
也可以通过属性字典传参,效果完全一致:
merchant_divs = soup.find_all('div', attrs={'class': 'topclick-list-element-game-merchant'})
转义文本的额外处理
你贴出的片段中标签显示为<div ..."这类HTML实体格式,分两种情况处理:
- 如果只是提问粘贴时平台自动转义,txt文件本身存的是正常的
<div>原生标签,直接用上面的基础写法即可。 - 如果txt文件里实际存储的就是转义后的文本,BeautifulSoup会把这类内容识别为普通文本而非DOM标签,需要先做反转义再解析:
import html from bs4 import BeautifulSoup with open('WarpipsPageText.txt', 'r') as f: page_text = f.read() # 将HTML实体转回原生标签格式 page_text = html.unescape(page_text) soup = BeautifulSoup(page_text, 'html5lib') merchant_divs = soup.find_all('div', class_='topclick-list-element-game-merchant')
内容的提问来源于stack exchange,提问作者RaidingGames
相关产品推荐
相关产品推荐

