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

BeautifulSoup解析异常:无法获取Zenodo搜索页标题求助

嘿,我遇到过类似的问题!Zenodo的搜索页面内容是通过JavaScript动态渲染的,这就是为什么你用requests+BeautifulSoup只能拿到空列表——静态请求获取的初始HTML里根本没有你要找的标题元素,它们是页面加载后由JS动态生成的。下面给你两个可行的解决方案:

方案1:使用动态渲染工具(Selenium)

这类工具可以模拟真实浏览器的行为,等待页面完全渲染后再提取内容,完美解决动态加载的问题。

步骤:

  1. 安装依赖库:
pip install selenium webdriver-manager
  1. 编写代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from bs4 import BeautifulSoup

# 自动管理Chrome驱动,无需手动下载
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

try:
    # 访问目标搜索页面
    driver.get("https://zenodo.org/search?page=1&size=20&q=broma")
    
    # 等待搜索结果标题加载完成(选择器根据页面实际元素调整,这里用.record-title示例)
    WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".record-title"))
    )
    
    # 拿到渲染后的页面源码,再用BeautifulSoup解析
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, 'html.parser')
    
    # 提取所有标题文本
    titles = [title.get_text(strip=True) for title in soup.select(".record-title")]
    print(titles)
finally:
    # 确保浏览器关闭
    driver.quit()

方案2:调用Zenodo官方API(更推荐)

Zenodo提供了专门的REST API,直接调用API获取数据比爬取网页更稳定、高效,完全不需要处理动态渲染问题。

代码示例:

import requests

# 构造API请求参数
params = {
    "q": "broma",
    "page": 1,
    "size": 20
}

# 发送GET请求到Zenodo搜索API
response = requests.get("https://zenodo.org/api/records", params=params)
response.raise_for_status()  # 检查请求是否成功

# 解析JSON格式的响应数据
data = response.json()

# 提取所有记录的标题
titles = [record["metadata"]["title"] for record in data["hits"]["hits"]]
print(titles)

这个方法不仅能拿到标题,还能轻松获取作者、DOI、发布日期等更多元数据,而且API的请求规则清晰,不会因为页面结构变化导致代码失效。

内容的提问来源于stack exchange,提问作者Jorge Galán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:13:08