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

使用Python+Beautiful Soup做网页爬虫无输出也无报错如何解决?

问题原因

  • 你初始化BeautifulSoup时没有指定解析器,不同运行环境的默认解析器存在差异,可能会导致HTML结构解析异常,但这不是无输出的核心原因。
  • 核心问题是你抓取的站点内容是客户端JavaScript动态渲染生成的:requests.get只能拿到页面初始的静态HTML骨架,你要提取的state-name fadeInUp类的div元素,是页面加载完成后JS异步请求数据后才插入到DOM里的,原始静态HTML里根本不存在这些元素,所以find_all返回空列表,运行后只会打印空的[],不会抛出任何报错。

你可以先运行以下代码验证这个结论:

from bs4 import BeautifulSoup
import requests

html_file = requests.get('https://www.covid19india.org').text 
# 检查目标类名是否存在于原始静态HTML中
print('state-name' in html_file)

运行后输出会是False,直接证明原始页面没有你要找的元素。

解决方法

方法1:请求站点数据接口(优先推荐)

这类数据展示类站点一般都会有专门的后端接口返回结构化数据,你可以直接通过浏览器开发者工具的网络面板,筛选XHR/ Fetch类型的请求,找到返回各州疫情数据的接口,直接用requests请求该接口,解析返回的JSON数据即可,效率远高于解析HTML页面。

方法2:使用模拟浏览器工具获取渲染后页面

如果你确实需要解析页面DOM结构,可以使用Selenium、Playwright这类支持运行浏览器JS的工具,等待页面完全加载后再提取内容,示例代码如下:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time

# 启动Chrome浏览器
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get('https://www.covid19india.org')
# 等待页面加载完成,也可以使用显式等待提升稳定性
time.sleep(3)

# 获取渲染完成后的页面源码
rendered_html = driver.page_source
soup = BeautifulSoup(rendered_html, 'lxml')
states = soup.find_all('div',class_='state-name fadeInUp')

print(states)
# 关闭浏览器
driver.quit()

运行前需要先安装依赖:
pip install selenium webdriver-manager beautifulsoup4 lxml requests

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 11:06:04