从经过身份验证的站点获取文件(使用python urllib、urllib2)

从经过身份验证的站点获取文件(使用python urllib、urllib2),python,urllib2,urllib,Python,Urllib2,Urllib,我正在尝试从站点获取查询的excel文件。当我输入直接链接时,它将导致一个登录页面,一旦我输入用户名和密码,它将继续自动下载excel文件。我试图避免安装不属于标准python的附加模块(此脚本将在“标准化机器”上运行,如果未安装该模块,它将无法工作) 我尝试了以下操作,但在excel文件中看到“页面登录”信息:-| import urllib url = "myLink_queriedResult/result.xls" urllib.urlretrieve(url,"C:\\test.xl

我正在尝试从站点获取查询的excel文件。当我输入直接链接时,它将导致一个登录页面,一旦我输入用户名和密码,它将继续自动下载excel文件。我试图避免安装不属于标准python的附加模块(此脚本将在“标准化机器”上运行,如果未安装该模块,它将无法工作)

我尝试了以下操作,但在excel文件中看到“页面登录”信息:-|

import urllib

url = "myLink_queriedResult/result.xls"
urllib.urlretrieve(url,"C:\\test.xls")
所以。。然后我研究了使用urllib2进行密码验证,但后来我被卡住了

我有以下代码:

import urllib2
import urllib

theurl = 'myLink_queriedResult/result.xls'
username = 'myName'
password = 'myPassword'

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, theurl, username, password)

authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
pagehandle = urllib2.urlopen(theurl)
pagehandle.read()  ##but seems like it still only contain a 'login page'   

感谢您提前提出建议。:)

Urllib在最近几年中通常被避开

这将满足您的要求:

import requests
from requests.auth import HTTPBasicAuth

theurl= 'myLink_queriedResult/result.xls'
username = 'myUsername'
password = 'myPassword'

r=requests.get(theurl, auth=HTTPBasicAuth(username, password))

在这里您可以找到更多信息,您需要使用cookies来允许身份验证。 `


您可以用Python 3尝试这种方式

    import requests
    #import necessary Authentication Method 
    from requests_ntlm import HttpNtlmAuth
    from xlrd import open_workbook
    import pandas as pd
    from io import BytesIO
    r = requests.get("http://example.website",auth=HttpNtlmAuth('acc','password'))
    xd = pd.read_excel(BytesIO(r.content))
参考:


  • 您可以使用requests.get下载文件。请尝试以下示例代码:

    import requests
    from requests.auth import HTTPBasicAuth
    
    def download_file(user_name, user_pwd, url, file_path):
        file_name = url.rsplit('/', 1)[-1]
        with requests.get(url, stream = True, auth = HTTPBasicAuth(user_name, user_pwd)) as response:
            with open(file_path + "/" + file_name, 'wb') as f:
                for chunk in response.iter_content(chunk_size = 8192):
                    f.write(chunk)
    
    # You will download the login.html file to /home/dan/
    download_file("dan", "password", "http://www.example.com/login.html", "/home/dan/")
    
    享受它

    import requests
    from requests.auth import HTTPBasicAuth
    
    def download_file(user_name, user_pwd, url, file_path):
        file_name = url.rsplit('/', 1)[-1]
        with requests.get(url, stream = True, auth = HTTPBasicAuth(user_name, user_pwd)) as response:
            with open(file_path + "/" + file_name, 'wb') as f:
                for chunk in response.iter_content(chunk_size = 8192):
                    f.write(chunk)
    
    # You will download the login.html file to /home/dan/
    download_file("dan", "password", "http://www.example.com/login.html", "/home/dan/")