从多个页面下载pdf时找不到跳过页面

问题描述 投票:0回答:2

我试图从多个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")

但是看起来,它仍然从未找到的页面下载

python url web-scraping request
2个回答
0
投票

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)

0
投票

您应该查看服务器响应。模块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)

0
投票

您需要检查从请求中收到的响应,然后才能下载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.

© www.soinside.com 2019 - 2024. All rights reserved.