美文网首页
使用BeautifulSoup进行网络抓取数据,SSL: CER

使用BeautifulSoup进行网络抓取数据,SSL: CER

作者: yzm_588b | 来源:发表于2018-01-24 15:53 被阅读0次

    from urllib.request import urlopen

    from bs4 import BeautifulSoup

    import sys

    import ssl

    context = ssl._create_unverified_context()

    html = urlopen("http://en.wikipedia.org/wiki/Kevin_Bacon", context=context)

    bsObj = BeautifulSoup(html)

    for link in bsObj.findAll("a"):

        if 'href' in link.attrs:

            print(link.attrs["href"])

    问题:  

    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 683, in do_handshake

        self._sslobj.do_handshake()

    ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)

    “SSL: CERTIFICATE_VERIFY_FAILED”。

    Python 升级到 2.7.9 之后引入了一个新特性,当使用urllib.urlopen打开一个 https 链接时,会验证一次 SSL 证书。

    解决方案包括下列两种方式:

    1. 使用ssl创建未经验证的上下文,在urlopen中传入上下文参数

    import  ssl 

    import urllib2

    context = ssl._create_unverified_context()

    print urllib2.urlopen("https://www.12306.cn/mormhweb/", context=context).read()

    2. 全局取消证书验证

    import ssl

    importurllib2 

    ssl._create_default_https_context =ssl._create_unverified_context

    printurllib2.urlopen("https://www.12306.cn/mormhweb/").read()

    在此使用方法2,修改weibo.py,在第155行添加下列代码:

    import ssl

    ssl._create_default_https_context = ssl._create_unverified_context

    至此,问题圆满解决!

    相关文章

      网友评论

          本文标题:使用BeautifulSoup进行网络抓取数据,SSL: CER

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