成功获取图片链接后却无法向本地写入图片?

这是源码,20页的图片链接存放在links中用循环写入本地,链接能够正确得出,但写入本地部分会报错

import requests
import urllib.request
from time import sleep
from bs4 import BeautifulSoup

# url = 'https://weheartit.com/inspirations/taylorswift?page=1&before=275543698'
urls = ['https://weheartit.com/inspirations/taylorswift?page={}&before=275543698'.format(str(i)) for i in range(1,21)]
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
}
proxies = {"http": "http://122.72.32.73:80"}

folder_path = r'E:\文档\Python\Taylor Swift'
links = []
i = 0

def get_image(url):
    data = requests.get(url, headers=headers)
    sleep(2)
    soup = BeautifulSoup(data.text,'lxml')
    imgs = soup.select('img[width="300"]')

    # 判断链接后缀并替换为.webp
    for img in imgs:
        link = img.get('src')
        if link[-4:] =='.png':
            img_link = link.replace('png', 'webp')
        else:
            img_link = link.replace('jpg','webp')
        links.append(img_link)

    for link in links:
        urllib.request.urlretrieve(link, folder_path + '\\' + str(i) + link[-4:])
        global i
        i += 1
        print('完成第%d张' % i)

for url in urls:
    get_image(url)

报错内容:urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:720)>

阅读 3.8k
3 个回答

实际用的代码,不是你给出的代码吧。
报错信息是证书问题,而源网站证书我现在访问没问题,我猜,是因为你用了代理,而代理那层你没有处理证书。(怎么处理又要说一大堆)

最近使用python2.7.12 访问公司的https API获取内容,同样引发这个错误。找到一圈原因如下:
Python 2.7.9 之后引入了一个新特性,当你urllib.urlopen一个 https 的时候会验证一次 SSL 证书,当目标使用的是自签名的证书时就会raise urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)> 的错误消息. requests 也一样。
对于requests模块,post和get都有一个叫verify的参数,把他设成False就可以了。

data = requests.get(url, headers=headers, verify=False)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进