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

使用BeautifulSoup提取元素失败求助:无法找到指定class的span标签

解决BeautifulSoup无法找到目标元素的问题

可能的原因及对应方案

1. 目标内容由JavaScript动态加载

requests.get()只能获取页面初始的静态HTML,很多现代网站会通过JS异步加载内容,你要找的simpleShowMore元素可能是页面加载后才渲染出来的。

解决方法:使用Selenium模拟浏览器加载页面,获取完整渲染后的HTML:

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

# 配置无头浏览器模式
chrome_options = Options()
chrome_options.add_argument("--headless=new")
driver = webdriver.Chrome(options=chrome_options)

url = "https://www.hindawi.com/journals/am/2021/1623076/"
driver.get(url)

# 获取完整渲染后的页面源码
soup = BeautifulSoup(driver.page_source, 'html.parser')
results = soup.find_all('span', class_='simpleShowMore')
print(results)

driver.quit()

2. 目标元素的class名称已更新

网站可能改版,原有的simpleShowMore类名已变更。你可以手动检查页面结构:

  • 打开目标网页,按F12打开开发者工具
  • 使用元素选择器定位你要找的内容,查看它的最新class或标签结构

比如,如果现在目标内容的class变成了show-more,就把代码里的class_='simpleShowMore'改成class_='show-more'。

3. 选择器范围太窄

有时候目标元素可能嵌套在特定容器内,直接全局查找会漏掉。可以先定位父容器再查找子元素:

# 先找到父容器,比如假设父容器class为"article-content"
parent_container = soup.find('div', class_='article-content')
if parent_container:
    results = parent_container.find_all('span', class_='simpleShowMore')
    print(results)

4. 请求头不完整被网站拦截

部分网站会验证请求头,比如缺少User-Agent会返回不完整内容。可以给requests添加请求头:

import requests
from bs4 import BeautifulSoup

url = "https://www.hindawi.com/journals/am/2021/1623076/"
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'
}
response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, 'html.parser')
results = soup.find_all('span', class_='simpleShowMore')
print(results)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:52:13