下载文件时出现Python 3错误403

时间:2016-01-05 15:11:47

标签: python python-3.x python-requests python-3.4

我使用脚本从HTML页面获取下载链接(通过邮件发送给我),然后下载文件,该脚本已经运行了大约6个月,但上周我开始获取& #34; 403错误"。

从我所阅读和理解的内容来看,问题是该网站阻止了我,认为它是机器人(不能否认),但我并没有抓该网站的HTML代码,只是尝试使用requests.get下载文件,我只从一个特定网站获得此错误,其他我可以下载的错误。

我已尝试设置headers={'User-Agent': 'Mozilla/5.0'},但这没有用。

这是下载文件的功能:

def download_file(dl_url, local_save_path):
        """Download URL to given path"""
        user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'

        auth_check = requests.get(dl_url, auth=(username.get(), password.get()), verify=False, headers={'User-Agent': user_agent})

        dnl_sum = 1024
        local_filename = dl_url.split('/')[-1]
        complete_name = os.path.join(local_save_path, local_filename)

        # Get file size
        r = requests.head(dl_url, auth=(username.get(), password.get()), verify=False, headers={'User-Agent': user_agent})
        try:
            dl_file_size = int(r.headers['content-length'])
            file_size.set(str(int(int(r.headers['content-length']) * (10 ** -6))) + "MB")
            c = 1
        except KeyError:
            c = 0
            pass
        # NOTE the stream=True parameter
        print('1')
        r = requests.get(dl_url, stream=True, auth=(username.get(), password.get()), verify=False, headers={'User-Agent': user_agent})
        print('2')
        while True:
            try:
                with open(complete_name, 'wb') as f:
                    for chunk in r.iter_content(chunk_size=1024):
                        if chunk:  # filter out keep-alive new chunks
                            f.write(chunk)
                            f.flush()
                            if c == 1:
                                download_perc.set(percentage(dl_file_size, dnl_sum))
                            elif c == 0:
                                print(dnl_sum)
                            dnl_sum = os.path.getsize(complete_name)
            except FileNotFoundError:
                continue
            break
    return

1 个答案:

答案 0 :(得分:0)

您是否尝试使用代理? 你可以使用tor,它允许你动态的IP地址和网站无法识别你。

试试这个https://techoverflow.net/blog/2015/02/06/using-python-requests-over-tor/