簡體   English   中英

從需要使用請求登錄的網站下載 pdf 文件,python3

[英]Download a pdf file from a website that requires log in using requests, python3

我有一個網站,我想使用請求下載 pdf,該網站要求您登錄,然后您可以訪問 pdf 文件。

我正在使用這個腳本,但它不起作用,是什么問題? 我使用了另一篇文章中的一些代碼,但不知道如何解決這個問題!!!

import requests
import sys
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}


login_data = {
    'Email': 'My-email',
    'Password': 'My-password',
    'login': 'Login'
}


url = 'https://download-website' #The website i want to download the file from
filename = 'filename.pdf'
# creating a connection to the pdf
print("Creating the connection ...")


with requests.session() as s:
    url1 = 'https://login-website/' #The website i want to log in into
    r = s.get(url1, headers=headers, stream=True)
    soup = BeautifulSoup(r.content, 'html5lib')
    login_data['__RequestVerificationToken'] = soup.find('input', attrs={'name':'__RequestVerificationToken'})['value']

    r = s.post(url1, data=login_data, headers=headers, stream=True)
    with requests.get(url, stream=True) as r:
    
        if r.status_code != 200:
            print("Could not download the file '{}'\nError Code : {}\nReason : {}\n\n".format(
                url, r.status_code, r.reason), file=sys.stderr)
        else:
            # Storing the file as a pdf
            print("Saving the pdf file  :\n\"{}\" ...".format(filename))
            with open(filename, 'wb') as f:
                try:
                    total_size = int(r.headers['Content-length'])
                    saved_size_pers = 0
                    moversBy = 8192*100/total_size
                    for chunk in r.iter_content(chunk_size=8192):
                        if chunk:
                            f.write(chunk)
                            saved_size_pers += moversBy
                            print("\r=>> %.2f%%" % (
                                saved_size_pers if saved_size_pers <= 100 else 100.0), end='')
                    print(end='\n\n')
                except Exception:
                    print("==> Couldn't save : {}\\".format(filename))
                    f.flush()
                    r.close()
            r.close()

我只能猜測,因為我不知道該網站的鏈接。 嘗試將用戶數據的鍵寫成小寫。 如果這不起作用,請嘗試使用瀏覽器的開發人員工具找出網站的注冊表單所期望的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM