You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用BeautifulSoup爬取URL时soup.findAll返回空列表[]?

问题原因及解决办法

可能的原因1:目标内容由JavaScript动态渲染

你用requests获取的是服务器返回的初始HTML,而目标的.section内容可能是页面加载后通过JavaScript异步请求数据渲染出来的,初始HTML里根本没有这个元素,所以BeautifulSoup找不到。

解决办法:

  • 打开浏览器开发者工具(F12),切换到Network标签页,刷新页面,筛选XHR/Fetch请求,查找返回包含"HOT TIPS"相关数据的接口。找到后直接请求这个接口,就能拿到结构化数据(通常是JSON格式),不需要解析HTML。
  • 比如你可以搜索接口里的关键词,比如"hotTips"或者直接看返回内容里的提示文本,找到对应的API地址后,用requests请求该接口即可。

可能的原因2:反爬机制拦截了请求

网站可能识别出你的请求是爬虫,返回的内容不完整或者是假页面。你的headers只有User-Agent,可能不够。

解决办法:

  • 补充更多请求头信息,从浏览器复制完整的请求头(包括Accept、Accept-Language、Referer等),模拟真实浏览器请求:
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    'Referer': 'https://www.barstoolsportsbook.com/',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
}
  • 另外可以尝试带上浏览器的cookies,先在浏览器访问该页面,复制cookies添加到requests.get的cookies参数里。

可能的原因3:选择器不准确

目标元素的class可能有变化,或者你用的选择器没有考虑到嵌套结构,或者元素在iframe中。

解决办法:

  • 先打印html.text的内容,搜索是否存在class="section"或者"HOT TIPS"关键词,确认这些内容是否在返回的HTML里。
  • 如果元素在iframe中,需要先找到iframe的src地址,请求该地址的内容再解析。
  • 可以尝试用更精确的选择器,比如结合父元素或者其他属性:
# 结合data-v属性缩小筛选范围
data = soup.find_all('div', attrs={"class": "section", "data-v-50e01018": ""})

内容的提问来源于stack exchange,提问作者smitty_werben_jagerm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:06:20