
在进行网页数据抓取时,我们经常会遇到内容通过javascript动态加载的网站。这类网站在初始html响应中可能不包含所需的图片链接或数据,而是通过客户端脚本在页面加载完成后异步请求数据并渲染。对于这类场景,仅仅使用requests库获取html并结合beautifulsoup解析静态内容往往会失败,因为beautifulsoup无法执行javascript。虽然selenium等自动化测试工具可以模拟浏览器行为,执行javascript并等待内容加载,但其资源消耗较大,且在某些复杂场景下(如本案例中内容来自第三方api)仍然可能难以直接定位到渲染后的元素。
解决动态加载问题的关键在于“透过现象看本质”,即找出页面数据实际的来源。许多动态加载的内容并非直接嵌入在JavaScript代码中,而是通过JavaScript向后端API发送请求获取。我们可以利用浏览器的开发者工具来发现这些隐藏的API调用。
一旦识别出API接口,我们就可以绕过前端渲染,直接向该API发送请求并解析其JSON响应。
上述API URL包含多个关键参数,理解它们对于构建请求至关重要:
我们可以使用Python的requests库来模拟这些API请求。
import requests
import json
import re
import time
import os
from urllib.parse import urlparse
def fetch_dermnet_images_via_api(query, max_pages=3, delay_seconds=1):
"""
通过Google CSE API抓取Dermnet的图片链接。
注意:cse_tok和cselibv参数可能需要动态获取或定期更新。
"""
base_api_url = "https://cse.google.com/cse/element/v1"
# 从浏览器开发者工具中获取的关键参数。
# cse_tok和cselibv通常是动态的,这里使用示例值,实际应用中可能需要更复杂的策略来获取。
# cx是Google CSE的ID,通常是固定的。
params = {
"rsz": "large",
"num": "16", # 每页图片数量
"hl": "en",
"source": "gcsc",
"gss": ".com",
"cselibv": "8e77c7877b8339e2", # 示例值,请从网络请求中获取最新
"searchtype": "image",
"cx": "015036873904746004277:nz7deehiccq", # Dermnet的CSE ID
"q": query,
"safe": "off",
"cse_tok": "AFW0emwRaupmNcwPmPDnZm7vKaJV:1684998350721", # 示例token,请从网络请求中获取最新
"exp": "csqr,cc,bf",
# "callback": "google.search.cse.api10440" # 如果直接请求JSON,可以不带callback参数
}
all_image_urls = []
for page in range(1, max_pages + 1):
print(f"Fetching page {page} for query: '{query}'")
# Google CSE API通过start参数控制分页,start表示从第几个结果开始
params["start"] = (page - 1) * int(params["num"]) + 1
try:
# 移除callback参数以获取纯JSON响应,如果存在的话
temp_params = params.copy()
if "callback" in temp_params:
del temp_params["callback"]
# 模拟浏览器User-Agent
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(base_api_url, params=temp_params, headers=headers, timeout=15)
response.raise_for_status() # 检查HTTP请求是否成功
# Google CSE API返回的响应通常是JSONP格式,即以函数调用以上就是动态加载网页图片抓取:Dermnet案例与Google CSE API利用指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号