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

如何用BeautifulSoup提取HTML的class标签并获取网站名言内容?

问题分析与解决方案

你的代码无输出的核心原因是:目标网站的名言列表是通过JavaScript动态加载的。urlopen只能获取服务器返回的初始静态HTML,这部分内容里并不包含class="quote-list"的元素,因此findAll找不到匹配内容。

解决方法:获取动态渲染后的页面

使用Selenium模拟浏览器加载页面,获取JavaScript渲染完成后的完整HTML,再进行数据提取。

步骤1:安装依赖

先安装Selenium库:

pip install selenium

同时下载对应浏览器的驱动(如ChromeDriver),确保驱动版本与浏览器版本匹配,可将驱动路径配置到环境变量,或在代码中直接指定。

步骤2:修改后的代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup as soup

# 配置Chrome无头模式(无需打开可视化窗口)
chrome_options = Options()
chrome_options.add_argument("--headless=new")
# 若驱动未在环境变量中,需指定executable_path,示例:
# driver = webdriver.Chrome(executable_path="/你的驱动路径/chromedriver", options=chrome_options)
driver = webdriver.Chrome(options=chrome_options)

url = "https://allauthor.com/quotes/"
driver.get(url)

# 获取渲染完成后的页面源码
page_html = driver.page_source
driver.quit()

# 解析页面
page_soup = soup(page_html, "html.parser")
# 定位名言列表容器
containers = page_soup.find_all("div", class_="quote-list")

# 提取并输出第一条名言的纯文本
if containers:
    first_quote = containers[0].find("div", class_="quote-content").get_text(strip=True)
    print("第一条名言:", first_quote)
else:
    print("未找到名言内容")

额外提示

  • 可通过浏览器开发者工具(F12)的「网络」面板分析:如果名言是通过XHR接口加载的,直接请求对应API效率更高,但需要自行分析接口参数和返回格式。
  • 使用Selenium时,务必保证浏览器驱动与浏览器版本兼容,避免启动失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:30:41