求助:使用Python BeautifulSoup抓取EUDamed平台树状列表数据
抓取欧盟EUDamed平台树状列表数据的解决方案
EUDamed平台的树状列表是通过JavaScript动态渲染的,直接用requests+BeautifulSoup请求静态HTML页面拿不到目标数据——数据是页面加载后通过异步请求获取并渲染的。下面提供两种可行的抓取方案:
方案一:使用Selenium模拟浏览器渲染(适合新手直观操作)
这种方法模拟真实浏览器打开页面,等待动态内容加载完成后再提取数据:
- 安装依赖:
pip install selenium beautifulsoup4
同时下载对应浏览器的WebDriver(比如ChromeDriver,需和浏览器版本匹配),配置到系统PATH或在代码中指定路径。
- 示例代码:
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 bs4 import BeautifulSoup import time # 初始化Chrome驱动,其他浏览器需对应调整 driver = webdriver.Chrome() try: # 打开目标页面 driver.get("https://ec.europa.eu/tools/eudamed/#/screen/nomenclatures") # 等待树状列表核心元素加载(需通过浏览器开发者工具确认实际元素选择器,示例用tree-node作为占位) WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "tree-node")) ) # 预留时间确保所有节点加载完成 time.sleep(2) # 获取渲染后的页面HTML page_source = driver.page_source soup = BeautifulSoup(page_source, "html.parser") # 提取树状节点数据,根据实际DOM结构调整选择器 tree_nodes = soup.find_all(class_="tree-node") for node in tree_nodes: node_text = node.get_text(strip=True) print(node_text) finally: # 关闭浏览器 driver.quit()
提示:需通过浏览器F12开发者工具查看树状节点的真实class或标签,替换代码中的tree-node选择器。
方案二:直接抓取后台API(更高效,推荐)
通过浏览器开发者工具找到加载树状数据的API接口,直接请求获取原始JSON数据,无需渲染页面:
定位API接口:
打开目标页面按F12,切换到「网络」面板,刷新页面后筛选「XHR/Fetch」请求,找到返回树状结构数据的接口(通常路径包含nomenclatures或tree关键词)。示例代码(需替换为实际API地址):
import requests # 替换为实际找到的API接口URL api_url = "https://ec.europa.eu/tools/eudamed/api/nomenclatures/tree" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } response = requests.get(api_url, headers=headers) if response.status_code == 200: # 解析JSON并递归遍历树状结构(根据API返回的字段调整逻辑) tree_data = response.json() def traverse_tree(node): print(node.get("name")) # 假设节点名称字段为name if "children" in node and node["children"]: for child in node["children"]: traverse_tree(child) traverse_tree(tree_data) else: print(f"请求失败,状态码:{response.status_code}")
提示:若请求被拒绝,需检查接口的请求头(如Cookie、Authorization),确保和浏览器请求一致。
新手注意事项
- 严格遵守EUDamed平台的使用条款,避免高频次请求触发反爬机制。
- 使用Selenium时,务必保证浏览器和WebDriver版本匹配,否则会出现启动失败问题。
- 平台DOM结构或API接口可能更新,需定期检查并调整代码中的选择器或接口地址。
内容的提问来源于stack exchange,提问作者HFF
相关产品推荐
相关产品推荐

