如何使用BeautifulSoup提取div data-app结构中list__tile__title类文本
问题分析与解决办法
原代码错误说明
你提供的原有提取方法不正确,核心问题有两点:
- 类名拼写错误:
find_all方法中搜索的类名为list__tile__tile,和实际需要匹配的目标类名list__tile__title不一致,第一步就没有匹配到任何元素,自然不会有输出 - 逻辑冗余:不需要先匹配上层元素再遍历后代,BeautifulSoup 支持直接搜索全文档中所有符合条件的目标标签
可行实现方案
静态HTML场景(你提供的源码片段适用)
如果是已经拿到包含目标内容的完整静态HTML,直接用以下代码提取即可:
from bs4 import BeautifulSoup # 此处替换为你实际获取到的HTML文本 html = """ <div data-app="true" id="app" class="application application--light"></div> <div class="card" style="height:auto;" data-ripple="false"> <ul data-uid="669" class="list"> <li><a href="javascript:;" class="list__tile list__tile--link" data-ripple="true" style="position: relative;"><div class="list__tile__content"> <div class="list__tile__title">Car 1</div></div></a></li> <li><a href="javascript:;" class="list__tile list__tile--link" data-ripple="true"><div class="list__tile__content"> <div class="list__tile__title">Car 2</div></div></a></li> """ soup = BeautifulSoup(html, 'html.parser') # 直接匹配所有class为list__tile__title的div标签 for title_tag in soup.find_all('div', class_='list__tile__title'): print(title_tag.text.strip())
运行后输出:
Car 1 Car 2
动态渲染场景说明
如果实际请求页面时,拿到的源码中<div data-app="true">内部为空,目标列表是JavaScript动态加载生成的,那么静态请求拿到的HTML本身就没有目标内容,BeautifulSoup 无法直接提取,需要采取以下方案:
- 使用Selenium、Playwright 等模拟浏览器运行的工具,获取页面渲染完成后的完整HTML,再用上述方法提取
- 抓包找到前端请求列表数据的后端API接口,直接调用接口获取结构化数据,无需解析HTML
内容的提问来源于stack exchange,提问作者Enigmatiq
相关产品推荐
相关产品推荐

