我试图从多个URL下载pdf文件。使用此代码:
import requests
for i in range(1, 40000):
r = requests.get('http://www.setpp.kemenkeu.go.id/risalah/ambilFileDariDisk/'+str(i), allow_redirects=True, timeout=10)
open('file-risalah'+str(i)+'.pdf', 'wb').write(r.content)
但是显然,在这40000页中找不到很多页面,因此我得到了很多损坏的pdf。如何跳过未找到页面的下载?我尝试使用此:
import requests
import urllib
try:
for i in range(2847, 40000):
r = requests.get('http://www.setpp.kemenkeu.go.id/risalah/ambilFileDariDisk/'+str(i), allow_redirects=True, timeout=10)
open('file-risalah'+str(i)+'.pdf', 'wb').write(r.content)
except urllib.error.HTTPError:
print ("pdf not found")
但是看起来,它仍然从未找到的页面下载
requests为您提供属性“ ok”,以告诉您该页面没有错误,因此在打开文件之前检查如下:
import requests
for i in range(1, 40000):
r = requests.get('http://www.setpp.kemenkeu.go.id/risalah/ambilFileDariDisk/'+str(i), allow_redirects=True, timeout=10)
if r.ok:
open('file-risalah'+str(i)+'.pdf', 'wb').write(r.content)
您应该查看服务器响应。模块requests
为此提供status_code
:
import requests
for i in range(1, 40000):
url = 'http://www.setpp.kemenkeu.go.id/risalah/ambilFileDariDisk/' + str(i)
r = requests.get(url, allow_redirects=True, timeout=10)
if r.status_code == 200:
print(i, url)
open('file-risalah'+str(i)+'.pdf', 'wb').write(r.content)
您需要检查从请求中收到的响应,然后才能下载PDF。如果响应的status_code为200,则可以下载内容。
import requests
for i in range(1, 40000):
r = requests.get('http://www.setpp.kemenkeu.go.id/risalah/ambilFileDariDisk/'+str(i), allow_redirects=True, timeout=10)
if r.status_code == 200:
open('file-risalah'+str(i)+'.pdf', 'wb').write(r.content)
状态码200表示确定。您可以阅读许多here.