如何用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
相关产品推荐
相关产品推荐

