无法用Beautiful Soup/Selenium爬取Dermnet动态加载图片,求解决方案
解决DermNet NZ图片爬取问题
核心原因
该网站的图片资源完全依赖JavaScript动态渲染,部分图片还会通过滚动触发的异步请求加载。普通Beautiful Soup只能抓取静态HTML源码,而如果Selenium使用时未处理等待加载、滚动触发等逻辑,也会无法获取到目标元素。
有效解决方案
方案1:优化Selenium使用逻辑
- 显式等待目标容器加载:用
WebDriverWait替代固定休眠,确保图片容器完全渲染后再操作 - 模拟滚动加载:针对滚动触发的图片加载,循环滚动页面直到所有内容加载完成
- 检查iframe嵌套:部分网站会把图片放在iframe里,需先切换到对应iframe再抓取
示例代码:
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 import time driver = webdriver.Chrome() driver.get("https://dermnetnz.org/search.html?q=basal+cell+carcinoma+dermoscopy") # 等待图片网格容器加载 wait = WebDriverWait(driver, 20) wait.until(EC.presence_of_element_located((By.CLASS_NAME, "search-results__grid"))) # 滚动加载所有图片 last_scroll_height = driver.execute_script("return document.body.scrollHeight") while True: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(3) new_scroll_height = driver.execute_script("return document.body.scrollHeight") if new_scroll_height == last_scroll_height: break last_scroll_height = new_scroll_height # 提取图片链接 image_elements = driver.find_elements(By.TAG_NAME, "img") for img in image_elements: src = img.get_attribute("src") if src and "basal-cell-carcinoma" in src: print(src) driver.quit()
方案2:直接抓取异步接口数据
打开浏览器开发者工具(F12),切换到Network标签,筛选XHR请求,能找到网站获取图片列表的接口,直接请求该接口获取JSON数据,无需渲染页面:
- 定位返回图片数据的XHR接口(通常路径包含
/api/search) - 复制请求头和参数,用
requests库发送请求 - 解析JSON响应,提取图片URL字段
示例代码:
import requests 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", "Accept": "application/json, text/plain, */*" } params = { "q": "basal cell carcinoma dermoscopy", "limit": "30" # 可调整返回数量 } response = requests.get("https://dermnetnz.org/api/search", headers=headers, params=params) data = response.json() for result in data["results"]: if "imageUrl" in result: print(result["imageUrl"])
注意事项
- 控制请求频率,添加随机间隔,避免触发网站反爬机制
- 遵守网站
robots.txt规则,确保爬取行为合法合规
内容的提问来源于stack exchange,提问作者sanchay vashist
相关产品推荐
相关产品推荐

