如何用Python下载需身份验证的网页中链接的.dat文件
如何用Python下载需身份验证的网页中链接的.dat文件
嗨,你已经走对了大半流程——身份验证这步没问题,但最后下载文件的时候漏了最关键的一步:把请求获取到的文件内容写入到你创建的文件里!
你现在的代码里,open(filename, 'wb')只是创建了一个空的文件对象,但没有把requests.get返回的响应内容写进去,所以才会输出<_io.BufferedWriter name='data_file_of_interest.dat'>这个文件对象,而不是实际的文件内容。
给你修正后的代码,直接就能用:
import requests # 身份验证信息 username = 'user' password = 'pass' # 重要:这里的url要替换成.dat文件的**直接下载链接**,不是网站首页哦 file_url = 'location/of/website/data_file_of_interest.dat' filename = 'data_file_of_interest.dat' # 发送带身份验证的GET请求,获取文件内容 r = requests.get(file_url, auth=(username, password), allow_redirects=True) # 可选但推荐:检查请求是否成功,避免写入无效内容 if r.status_code == 200: # 用with语句自动管理文件句柄,安全又省心 with open(filename, 'wb') as f: f.write(r.content) print(f"文件 {filename} 下载完成!") else: print(f"下载失败,状态码:{r.status_code}")
还要提醒你几个小细节:
- 务必确认
file_url是.dat文件的直接下载地址,不是包含文件链接的网页地址。如果之前的url是网站首页,得找到点击下载按钮时实际跳转的那个文件链接才行。 - 用
with open的写法比直接open更稳妥,它会自动帮你关闭文件,不会出现资源泄漏的问题。 - 加上状态码检查能帮你快速排查问题:比如状态码401就是身份验证失败,404就是文件地址写错了。
如果你的url其实是包含文件下载链接的网页地址,那还需要多一步:先爬取这个页面,提取出.dat文件的直接下载链接。比如用BeautifulSoup解析页面里的<a>标签,找到对应文件的href属性,再把这个href作为file_url去请求就行。
备注:内容来源于stack exchange,提问作者uSER_23
相关产品推荐
相关产品推荐

