使用Python requests库下载特定URL PDF无内容问题求助
问题分析与解决
核心问题:代码逻辑错误导致内容丢失
你这段代码里有个关键错误:开启stream=True后,你先调用了next(response.iter_content(10))读取了10字节内容,这会把响应流的指针移到这10字节之后,后续再调用response.content时,剩余内容已经被消费完了,所以写入文件的是空内容。
可能的网站相关因素
也不排除目标网站的反爬策略影响:
- 部分网站会检测请求头完整性,除了User-Agent,可能还需要Referer、Accept等字段
- 有些网站会对频繁请求做限制,或者需要Cookie验证才能正常获取资源
修复后的代码
把多余的iter_content调用删掉,直接写入响应内容即可:
import requests pdf_url="https://www.npci.org.in/PDF/nach/circular/2015-16/Circular_No_126.pdf" pdf_title="test" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0"} response = requests.get(pdf_url, headers=headers, stream=True) if response.status_code == 200: with open(f"{pdf_title}.pdf", "wb") as fd: fd.write(response.content)
如果要保留流式写入(适合大文件),可以改成这样:
import requests pdf_url="https://www.npci.org.in/PDF/nach/circular/2015-16/Circular_No_126.pdf" pdf_title="test" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0"} response = requests.get(pdf_url, headers=headers, stream=True) if response.status_code == 200: with open(f"{pdf_title}.pdf", "wb") as fd: for chunk in response.iter_content(chunk_size=1024): fd.write(chunk)
额外排查建议
如果修复后还是无法正常下载:
- 打印
response.text查看返回内容,确认是不是反爬提示的HTML页面 - 复制URL到浏览器打开,确认目标PDF文件本身是否存在
- 补充更多请求头字段,完全模拟真实浏览器的请求参数
内容的提问来源于stack exchange,提问作者dfcsdf
相关产品推荐
相关产品推荐

