python使用urlretrieve下载文件时出现403 forbidden的解决方法

出现该错误的原因是服务器开启了反爬虫,一般情况下只需要设置header模拟浏览器即可,但是urlretrieve并未提供header参数。

使用urlopen也可以直接下载文件,例

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36"}
def down_pic(url, path):
    try:
        req = request.Request(url, headers=headers)
        data = request.urlopen(req).read()
        with open(path, 'wb') as f:
            f.write(data)
            f.close()
    except Exception as e:
        print(str(e))

还有一种解决方法:

opener=urllib.request.build_opener()
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve(url, Path)

6 条评论

[/0o0] [..^v^..] [0_0] [T.T] [=3-❤] [❤.❤] [^v^] [-.0] [!- -] [=x=] [→_→] [><] 更多 »
昵称
  1. 小白 Google Chrome 55 Google Chrome 55 Windows 10 Windows 10

    把文件就放在当前目录就好了 放在其他位置为什么不行再研究研究

  2. 小白 Google Chrome 55 Google Chrome 55 Windows 10 Windows 10

    我发现网址有问题 改正后能访问 但是下载没有用

  3. 小白 Google Chrome 55 Google Chrome 55 Windows 10 Windows 10

    第一种 403 第二种没反应但也没报错

  4. Wisedeveloper Google Chrome 66 Google Chrome 66 GNU/Linux GNU/Linux

    我用了第二种方法不行啊,还是403

    1. 鸽子 鸽子 Google Chrome 67 Google Chrome 67 Windows 10 Windows 10

      应该他们的反爬虫做的比较强,可以抓包看一下http请求头里都有什么。

  5. 匿名 Google Chrome 55 Google Chrome 55 Windows 7 Windows 7

    [/0o0] 神了