Невозможно скачать большое нет. из PDF из Интернета - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь скачать большое нет.из PDF в Интернете (4000+), используя этот код.Код хорошо работает для некоторых файлов, в то время как для других (почти половина из них) скачанный файл поврежден, и я получаю сообщение об ошибке: «Тип файла HTML-документ (text / html) не поддерживается».Пожалуйста, предложите изменения, которые я должен сделать.

lis = pd.read_csv("/home/harshit/geography/equitylist.csv") # list of all equities on BSE
for i in lis["Security Code"]:
    link = "https://www.bseindia.com/bseplus/AnnualReport/"+str(i)+"/"+str(i)+"0318.pdf"
    r = requests.get(link) # getting and saving annual report
    row=lis.loc[lis['Security Code'] ==i]
    name = row.iloc[0]["Security Id"]
    with open("reports2018incog/"+name+".pdf",'wb') as f:
        for chunk in r.iter_content(chunk_size=1024): 
            f.write(chunk)
    time.sleep(2)

1 Ответ

0 голосов
/ 23 января 2019

Возможно, файлы не являются pdf

Возможно, некоторые ссылки не работают или возвращают страницу перенаправления или страницу с ошибкой 404, потому что, как показывает ошибка, вы делаете запрос на файл PDF, а недействительно получить один, поэтому я предлагаю вам проверить, если файл PDF.1) Проверьте заголовки

In [19]: page  = requests.get("https://www.adobe.com/support/products/enterprise/knowledgecenter/media/c4611_sample_explain.pdf")

In [20]: page.headers
Out[20]: {'Content-Type': 'application/pdf', 'Content-Length': '88226', 'Server': 'Apache', 'Strict-Transport-Security': 'max-age=86400', 'Last-Modified': 'Wed, 05 Jan 2005 19:56:38 GMT', 'Accept-Ranges': 'bytes', 'X-Adobe-Loc': 'uw2', 'X-Content-Type-Options': 'nosniff', 'Cache-Control': 'max-age=21590', 'Expires': 'Wed, 23 Jan 2019 04:53:53 GMT', 'Date': 'Tue, 22 Jan 2019 22:54:03 GMT', 'Connection': 'keep-alive'}

In [21]: page.headers['Content-Type']
Out[21]: 'application/pdf'

Таким образом, простое условие if перед сохранением файла будет отличным способом начать!Итак, вот пересмотренный код для конкретной проблемы.

lis = pd.read_csv("/home/harshit/geography/equitylist.csv") # list of all equities on BSE
for i in lis["Security Code"]:
    link = "https://www.bseindia.com/bseplus/AnnualReport/"+str(i)+"/"+str(i)+"0318.pdf"
    r = requests.get(link) # getting and saving annual report
    if r.headers['Content-type'] == "application/pdf":
        row=lis.loc[lis['Security Code'] ==i]
        name = row.iloc[0]["Security Id"]
        with open("reports2018incog/"+name+".pdf",'wb') as f:
            for chunk in r.iter_content(chunk_size=1024): 
                f.write(chunk)
        time.sleep(2)
    else:
        print(f"Oops! Unable to process {link}")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...