使用Python Requests/Selenium自动下载MCA网站文件的解决方案
解决印度MCA网站文件下载的Requests代码问题
这类政府网站通常会校验会话状态,直接请求下载链接时因为缺少浏览器会话中的必要Cookie,会被服务器拒绝。解决方法是先通过会话访问目标页面获取Cookie,再发起下载请求。
以下是可运行的Python代码:
import requests # 目标页面和下载链接 base_url = "https://www.mca.gov.in/content/mca/global/en/data-and-reports/company-llp-info/incorporated-closed-month.html" download_url = "https://www.mca.gov.in/bin/dms/getdocument?mds=kSK4UVGwah4CaBAtANCECQ%253D%253D&type=download" # 创建会话对象,维持Cookie session = requests.Session() # 先访问主页面,获取会话Cookie try: session.get(base_url, timeout=10) except requests.exceptions.RequestException as e: print(f"访问主页面失败: {e}") exit() # 发起下载请求 try: response = session.get(download_url, stream=True, timeout=10) response.raise_for_status() # 检查请求是否成功 # 从响应头获取文件名,或者自定义文件名 filename = "mca_data_file.xlsx" # 可根据实际文件类型修改后缀 with open(filename, "wb") as f: for chunk in response.iter_content(chunk_size=8192): f.write(chunk) print(f"文件已成功保存为: {filename}") except requests.exceptions.RequestException as e: print(f"下载失败: {e}")
关键说明
- 使用
requests.Session():维持会话状态,确保第一次访问主页面获取的Cookie能被后续下载请求复用 stream=True:针对大文件,避免一次性将整个文件加载到内存,分块写入更高效response.raise_for_status():主动触发HTTP错误(比如403、500),方便排查问题
如果下载链接是临时生成的(比如mds参数会过期),需要每次运行时先从主页面解析最新的下载链接,而不是硬编码固定链接。
内容的提问来源于stack exchange,提问作者pratik patil
相关产品推荐
相关产品推荐

