Espacenet无直接链接文件自动化下载求助(受限VM环境)
解决Espacenet筛选结果自动化下载问题(无WebDriver/二进制依赖)
核心逻辑
Espacenet的下载功能依赖会话验证和动态生成的请求参数,看不到直接下载链接是因为请求由前端动态构造,且必须携带有效会话信息才能通过服务器校验。
具体实现步骤
1. 获取会话Cookie与CSRF Token
首先需要访问目标搜索页面,获取服务器生成的会话Cookie和页面内嵌的CSRF Token——这两个是后续请求通过验证的关键:
# 用curl快速获取Cookie和CSRF Token curl -c cookies.txt -s "https://worldwide.espacenet.com/patent/search?q=cpc%20%3D%20\"Y02B30%2F12\"" | grep -o 'name="csrfToken" value="[^"]*"' | cut -d '"' -f4 > csrf-token.txt
或者用Python实现:
import requests from bs4 import BeautifulSoup # 初始化会话,自动保持Cookie session = requests.Session() search_url = "https://worldwide.espacenet.com/patent/search?q=cpc%20%3D%20\"Y02B30%2F12\"" response = session.get(search_url) # 解析页面提取CSRF Token soup = BeautifulSoup(response.text, "html.parser") csrf_token = soup.find("input", {"name": "csrfToken"})["value"]
2. 构造下载请求
Espacenet的下载接口为/patent/search/download,需要携带搜索参数、CSRF Token和格式指定参数,直接用会话发送POST请求即可:
download_url = "https://worldwide.espacenet.com/patent/search/download" payload = { "q": 'cpc = "Y02B30/12"', # 和原搜索查询一致 "csrfToken": csrf_token, "format": "csv", # 可选excel、xml等格式 # 若有额外筛选条件,添加对应参数(比如Filter面板中选中的条件ID) } # 模拟浏览器请求头,避免被拦截 headers = { "Accept": "application/octet-stream", "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } # 发送请求并保存文件 response = session.post(download_url, data=payload, headers=headers) with open("espacenet_results.csv", "wb") as f: f.write(response.content)
3. 关键注意点
- 会话Cookie有效期较短,每次执行下载前都需要重新获取
- 若遇到Cloudflare验证,可在会话中添加更贴近真实浏览器的请求头,或短暂等待后重试
- Postman之前失败的原因大概率是未完整携带会话Cookie和CSRF Token,用会话保持工具(如
requests.Session)可解决该问题
内容的提问来源于stack exchange,提问作者zacthebigkub
相关产品推荐
相关产品推荐

