Python网页抓取:如何下载目标页面文件并解决PdfReadError报错
解决方案
你的问题出在错误地将网页HTML内容当作PDF文件处理:你请求的https://asn.scientificposters.com/epsAbstractASN.cfm?id=6是普通网页,返回的是HTML代码而非PDF流,所以PyPDF2会报EOF标记找不到的错误。
正确的做法是直接请求你提到的那个图片对应的apprizr.cfm链接,这个接口实际返回的是海报文件(PDF/图片格式)。
修正后的代码
import requests headers = { "accept": "*/*", "accept-encoding": "gzip, deflate, br, zstd", "accept-language": "en-US,en;q=0.9,en-IN;q=0.8", "priority": "u=1, i", "referer": "https://asn.scientificposters.com/epsAbstractASN.cfm?id=6", "sec-ch-ua": "\"Not)A;Brand\";v=\"99\", \"Microsoft Edge\";v=\"127\", \"Chromium\";v=\"127\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"Windows\"", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0" } # 直接请求海报文件接口 target_url = "https://asn.scientificposters.com/apprizr.cfm?C1A%2F12Y8hALzGGa7XK43k6yc%2BvAzbBWUzMVrtMoqM6BBIsnQV7bYHul%2BzTSg5vOqmtrKjRzudgo%3D" response = requests.get(target_url, headers=headers, allow_redirects=True) # 处理响应并保存文件 if response.status_code == 200: # 根据响应头判断文件类型 content_type = response.headers.get('Content-Type') if 'pdf' in content_type: filename = "poster.pdf" elif 'image/png' in content_type: filename = "poster.png" elif 'image/jpeg' in content_type: filename = "poster.jpg" else: filename = "poster.pdf" # 默认保存为PDF(多数场景下是该格式) with open(filename, 'wb') as f: f.write(response.content) print(f"文件已保存为 {filename}") else: print(f"请求失败,状态码:{response.status_code}")
关键说明
- 把
referer设为原网页地址,避免服务器拦截请求 - 开启
allow_redirects=True,处理接口可能的内部重定向 - 通过
Content-Type自动识别文件类型,保证保存格式准确
内容的提问来源于stack exchange,提问作者Shishir Singh
相关产品推荐
相关产品推荐

