def __fetch_content(self): response = request.urlopen(

来源:13-12 案例总结

HuffLeo

2017-12-22

def __fetch_content(self):

   response = request.urlopen('http://www.lianjia.com/')
   htmls = response.read()
   htmls = str(htmls,encoding='utf-8')
   print(htmls)


老师同样的代码为什么有的网站不能抓取,会报错


报错内容: 

urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>


写回答

4回答

NickChu

2017-12-26

遇到了和你类似的问题,查到一个网页解决了这个问题,大致的原因是:Python 升级到 2.7.9 之后引入了一个新特性,当使用urllib.urlopen打开一个 https 链接时,会验证一次 SSL 证书。
而当目标网站使用的是自签名的证书时就会抛出一个 urllib.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)> 的错误消息。

解决方法是:

context = ssl._create_unverified_context()

r = request.urlopen(Spider.url, context=context)

记得import ssl

原文链接:http://blog.csdn.net/moonhillcity/article/details/52767999


1
1
HuffLeo
是的,我也这么解决的,但是反扒技术还是挺重要的,需要更深入的学习,很多网站爬起来不是那么简单.具有很多问题
2017-12-26
共1条回复

7七月

2017-12-25

什么操作系统?mac?linux。这个一般在windows下没有这个问题,缺少了ssl的支持,看看是不是需要装一个openssl的库。

0
0

HuffLeo

提问者

2017-12-23

不是这个问题。

0
0

veryvvyy

2017-12-23

certificate verify failed 不是说明你的证书认证失败吗?也就是说你爬的网站不让你爬啊。

你想想看,链家的房源信息多宝贵啊,随便让你爬了他们靠什么吃饭啊。

0
0

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14597 学习 · 4469 问题

查看课程