美文网首页简友广场
request.urlretrieve请求图片地址下载失败404

request.urlretrieve请求图片地址下载失败404

作者: 刘年 | 来源:发表于2020-03-12 23:31 被阅读0次

    request.urlretrieve可以直接下载图片、网页和视频等文件,而不需要用with open,有时候非常好用。

    这个请求把请求和下载二合一,太简单了因此容易犯错。正常情况下两行代码即可实现

    import urllib.request

    urllib.request.urlretrieve('https://img.aitaotu.cc:8089/Pics/2019/0402/c_72/70992897ec064b798510b83d5eb9ff0d.jpg','tu.jpg')

    但是有一次却出现了网址打不开,但是点击网址明明可以打开

    报错404,但是实际点击网址就可以打开

    这里我们需要设置个请求头了,requests用习惯后,要区分requests和urllib.request之间请求的区别

    urllib.request中的hearders要通过创建opener实现

    from urllib import request

    opener = request.build_opener()

    opener.addheaders = [('User-Agent', '"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36                                     (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400                                     QQBrowser/10.5.3863.400'), ]

    request.install_opener(opener)

    request.urlretrieve('https://img.aitaotu.cc:8089/Pics/2020/0312/39/01.jpg','ssss.jpg')

    以上代码补充了user-agent,但是还是出现同样的情况,点击图片网址打开,开发者模式检查

    请求头

    因此继续补充请求头,注意请求头是[(,),(,)]的形式

    from urllib import request

    opener = request.build_opener()

    opener.addheaders = [('User-Agent', '"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'), ('Referer','https://img.aitaotu.cc:8089/Pics/2020/0312/39/01.jpg') ]

    request.install_opener(opener)

    request.urlretrieve('https://img.aitaotu.cc:8089/Pics/2020/0312/39/01.jpg','ssss.jpg')

    这样既可实现下载图片

    再把requests请求头Mark一下

    # headers ={

    #    'referer':'https://img.aitaotu.cc:8089/Pics/2020/0312/39/01.jpg',

    #    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'

    # }

    使用{ ‘  ’:,‘  ’:    }形式,并且不用建立opener

    对了,在urllib中也有一种请求方式,它不需要建立opener,建立请求头的方式与上面Requests相似

    即urllib.request.Request(url,headers=headers)

    并且headers也是 { ‘  ’:,‘  ’:    }形式,但是request.Request不是直接发送请求的,而是要用urllib.request.urlopen打开

    import urllib.request

    headers ={

    "   ":    , "   ":   

    }

    req = urllib.request.Request(url,headers=headers)

    resp =request.urlopen(req)

    相关文章

      网友评论

        本文标题:request.urlretrieve请求图片地址下载失败404

        本文链接:https://www.haomeiwen.com/subject/qubgjhtx.html