如何用Python脚本自动下载ECHA候选列表无直接链接的CSV?
ECHA候选列表CSV自动化下载解决方案
方案一:构造合规的HTTP请求(基于requests库)
直接用抓来的链接下载失败,大多是因为缺少必要的请求头、会话信息或参数,按以下步骤解决:
- 重新抓取请求详情
打开开发者工具(F12)的「网络」标签,触发CSV下载动作,找到对应请求后记录:
- 请求的URL、请求方法(GET/POST)
- 请求头里的
User-Agent、Referer、Accept字段 - 若为POST请求,复制请求体中的参数
- 用requests构造请求并保存文件
示例代码(GET请求场景):
import requests # 替换为你抓到的CSV请求URL csv_request_url = "https://echa.europa.eu/api/candidate-list/export.csv" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36", "Referer": "https://echa.europa.eu/es/candidate-list-table", "Accept": "text/csv,*/*;q=0.9" } # 初始化会话维持网站状态 session = requests.Session() # 先访问目标页面获取必要会话信息 session.get("https://echa.europa.eu/es/candidate-list-table", headers=headers) # 发送CSV请求 response = session.get(csv_request_url, headers=headers) # 检查请求是否成功 response.raise_for_status() # 保存到本地文件 with open("echa_candidate_list.csv", "wb") as csv_file: csv_file.write(response.content)
如果是POST请求,需添加data参数传入抓取到的表单数据。
方案二:模拟浏览器点击下载(基于Selenium)
如果网站下载是JavaScript触发(无直接API链接),用Selenium模拟用户操作更可靠:
- 依赖准备
安装Selenium和对应浏览器驱动(如ChromeDriver,需与浏览器版本匹配):
pip install selenium
- 编写模拟下载脚本
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 os import time # 设置下载目录 download_path = os.path.abspath("./echa_downloads") os.makedirs(download_path, exist_ok=True) # 配置Chrome浏览器选项 chrome_options = webdriver.ChromeOptions() prefs = { "download.default_directory": download_path, "download.prompt_for_download": False, "download.directory_upgrade": True } chrome_options.add_experimental_option("prefs", prefs) # 启动浏览器并访问页面 driver = webdriver.Chrome(options=chrome_options) driver.get("https://echa.europa.eu/es/candidate-list-table") # 等待下载按钮加载完成并点击(替换为实际的按钮选择器) try: download_btn = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Export as CSV')]")) ) download_btn.click() # 等待文件下载完成(根据文件大小调整时长) time.sleep(8) finally: driver.quit()
注意事项
- 替换代码中的按钮选择器:通过开发者工具找到下载按钮的XPath或CSS选择器,确保定位准确。
- 避免频繁请求:添加适当延时,防止被网站判定为爬虫封禁IP。
- 定期验证:网站接口或页面元素可能更新,需定期检查脚本是否正常工作。
内容的提问来源于stack exchange,提问作者Oscar_90_VLC
相关产品推荐
相关产品推荐

