python爬虫之趟雷整理

雷一:URLError

  问题具体描述:urllib.error.URLError: <urlopen error [Errno 11004] getaddrinfo failed

  1. import urllib.request
  2.  
  3. def load_message():
  4. url = 'http://www.baidu.com'
  5.  
  6. request = urllib.request.Request(url)
  7. response = urllib.request.urlopen(request)
  8. response_str = response.read().decode('utf-8')
  9.  
  10. return response.headers, request.headers, response_str
  11.  
  12. response_header, request_header, response_data = load_message()
  13. print(request_header)
  14. print('----------------------------------------')
  15. print(response_header)
  16. print('----------------------------------------')
  17. print(response_data)

  分析:报错原因为URLError,产生原因为URL,简单来说,就是URL资源无法访问或者访问不了。具体问题出在三个方向,URL本身,客户端,服务器。

  解决办法:第一点,检查URL书写是否正确;第二点,检查客户端网络连接状态;第三点,使用URL在浏览器地址栏访问验证服务器是否存在。

  问题具体描述:urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)>

  1. #!/usr/bin/env python
  2. # -*- coding=utf-8 -*-
  3. # Author: Snow
  4.  
  5. import urllib.request
  6.  
  7. def create_cookie():
  8. url = 'https://www.yaozh.com/member/'
  9. headers = {
  10. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko\
  11. Chrome/69.0.3497.92 Safari/537.36',
  12. 'Cookie': 'think_language=zh-CN; _ga=GA1.2.179792116.1550119571; _gat=1; acw_tc=2f624a2115501195808648935e4f2de7e89205315a7c9e8934c938389d8999; _gid=GA1.2.111857803.1550119581; yaozh_logintime=1550119751; yaozh_user=692948%09snown_1; yaozh_userId=692948; yaozh_uidhas=1; acw_tc=2f624a2115501195808648935e4f2de7e89205315a7c9e8934c938389d8999; MEIQIA_VISIT_ID=1H9g97Ef1WpjYsWf4b7UlGe3wel; PHPSESSID=5itl5rejqnekb07bfrtmuvr3l6; yaozh_mylogin=1550196658; MEIQIA_VISIT_ID=1HCCOYdyjR0FalzMfFm4vYsqevT; Hm_lvt_65968db3ac154c3089d7f9a4cbb98c94=1550119570%2C1550119584%2C1550119751%2C1550196659; Hm_lpvt_65968db3ac154c3089d7f9a4cbb98c94=1550196663'
  13. }
  14.  
  15. request = urllib.request.Request(url, headers=headers)
  16. response = urllib.request.urlopen(request)
  17. response_data = response.read().decode('utf-8')
  18.  
  19. return response_data
  20.  
  21. result = create_cookie()
  22. with open('cookies.html', 'w', encoding='utf-8') as f:
  23. f.write(result)

  分析:问题产生原因python使用urllib.request,urlopen()打开https链接时,需要验证SSL证书,如果网站使用自签名的证书会抛出异常。

  解决办法:第一点,使用SSL创建context验证上下文,传入urlopen()中context上下文参数;第二点,取消证书验证。

  1. #!/usr/bin/env python
  2. # -*- coding=utf-8 -*-
  3. # Author: Snow
  4.  
  5. import urllib.request
  6. import ssl #导入ssl模块
  7.  
  8. def create_cookie():
  9. url = 'https://www.yaozh.com/member/'
  10. headers = {
  11. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko\
  12. Chrome/69.0.3497.92 Safari/537.36',
  13. 'Cookie': 'think_language=zh-CN; _ga=GA1.2.179792116.1550119571; _gat=1; acw_tc=2f624a2115501195808648935e4f2de7e89205315a7c9e8934c938389d8999; _gid=GA1.2.111857803.1550119581; yaozh_logintime=1550119751; yaozh_user=692948%09snown_1; yaozh_userId=692948; yaozh_uidhas=1; acw_tc=2f624a2115501195808648935e4f2de7e89205315a7c9e8934c938389d8999; MEIQIA_VISIT_ID=1H9g97Ef1WpjYsWf4b7UlGe3wel; PHPSESSID=5itl5rejqnekb07bfrtmuvr3l6; yaozh_mylogin=1550196658; MEIQIA_VISIT_ID=1HCCOYdyjR0FalzMfFm4vYsqevT; Hm_lvt_65968db3ac154c3089d7f9a4cbb98c94=1550119570%2C1550119584%2C1550119751%2C1550196659; Hm_lpvt_65968db3ac154c3089d7f9a4cbb98c94=1550196663'
  14. }
  15.  
  16. context = ssl._create_unverified_context() # 创建验证SSL上下文
  17.  
  18. request = urllib.request.Request(url, headers=headers)
  19. response = urllib.request.urlopen(request context=context) # 传入context参数
  20. response_data = response.read().decode('utf-8')
  21.  
  22. return response_data
  23.  
  24. result = create_cookie()
  25. with open('cookies.html', 'w', encoding='utf-8') as f:
  26. f.write(result)
  1. #!/usr/bin/env python
  2. # -*- coding=utf-8 -*-
  3. # Author: Snow
  4.  
  5. import urllib.request
  6. import ssl
  7.  
  8. def create_cookie():
  9. url = 'https://www.yaozh.com/member/'
  10. headers = {
  11. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko\
  12. Chrome/69.0.3497.92 Safari/537.36',
  13. 'Cookie': 'think_language=zh-CN; _ga=GA1.2.179792116.1550119571; _gat=1; acw_tc=2f624a2115501195808648935e4f2de7e89205315a7c9e8934c938389d8999; _gid=GA1.2.111857803.1550119581; yaozh_logintime=1550119751; yaozh_user=692948%09snown_1; yaozh_userId=692948; yaozh_uidhas=1; acw_tc=2f624a2115501195808648935e4f2de7e89205315a7c9e8934c938389d8999; MEIQIA_VISIT_ID=1H9g97Ef1WpjYsWf4b7UlGe3wel; PHPSESSID=5itl5rejqnekb07bfrtmuvr3l6; yaozh_mylogin=1550196658; MEIQIA_VISIT_ID=1HCCOYdyjR0FalzMfFm4vYsqevT; Hm_lvt_65968db3ac154c3089d7f9a4cbb98c94=1550119570%2C1550119584%2C1550119751%2C1550196659; Hm_lpvt_65968db3ac154c3089d7f9a4cbb98c94=1550196663'
  14. }
  15.  
  16. ssl._create_default_https_context = ssl._create_unverified_context # 缺省context参数不做验证,取消验证ssl证书
  17.  
  18. request = urllib.request.Request(url, headers=headers)
  19. response = urllib.request.urlopen(request)
  20. response_data = response.read().decode('utf-8')
  21.  
  22. return response_data
  23.  
  24. result = create_cookie()
  25. with open('cookies.html', 'w', encoding='utf-8') as f:
  26. f.write(result)

雷二:HTTPError

  问题具体描述:urllib.error.HTTPError: HTTP Error 503: Service Temporarily Unavailable

  1. #!/usr/bin/env python
  2. # -*- coding=utf-8 -*-
  3. # Author: Snow
  4.  
  5. import urllib.request
  6.  
  7. def fee_proxy():
  8. url = 'https://www.xicidaili.com/nn/'
  9.  
  10. # 付费代理IP第一种方式
  11. # proxy_1 = {
  12. # 'http': 'user_name:passswor@121.61.1.222:9999'
  13. # }
  14.  
  15. # 付费代理IP第二种方式
  16. user_name = 'admin'
  17. password = ''
  18. proxy_ip = '121.61.1.222:9999'
  19. proxy_manage = urllib.request.HTTPPasswordMgrWithDefaultRealm() # 密码管理器
  20. proxy_manage.add_password(None, proxy_ip, user_name, password)
  21.  
  22. # proxy_handler = urllib.request.ProxyHandler(proxy_1)
  23. proxy_handler = urllib.request.ProxyBasicAuthHandler(proxy_manage) # 代理IP验证处理器
  24. proxy_openner = urllib.request.build_opener(proxy_handler)
  25.  
  26. response = proxy_openner.open(url)
  27. response_str = response.read().decode('utf-8')
  28.  
  29. return response_str
  30.  
  31. data = fee_proxy()
  32. print(data)

  分析

  解决办法

python爬虫之趟雷的更多相关文章

  1. python高级—— 从趟过的坑中聊聊爬虫、反爬以及、反反爬,附送一套高级爬虫试题

    前言: 时隔数月,我终于又更新博客了,然而,在这期间的粉丝数也就跟着我停更博客而涨停了,唉 是的,我改了博客名,不知道为什么要改,就感觉现在这个名字看起来要洋气一点. 那么最近到底咋不更新博客了呢?说 ...

  2. Python爬虫——城市公交、地铁站点和线路数据采集

    本篇博文为博主原创,转载请注明. 城市公交.地铁数据反映了城市的公共交通,研究该数据可以挖掘城市的交通结构.路网规划.公交选址等.但是,这类数据往往掌握在特定部门中,很难获取.互联网地图上有大量的信息 ...

  3. 【Python爬虫】正则表达式与re模块

    正则表达式与re模块 阅读目录 在线正则表达式测试 常见匹配模式 re.match re.search re.findall re.compile 实战练习 在线正则表达式测试 http://tool ...

  4. [框架安装趟雷指南]Ubuntu+1060+cuda+cudnn+Keras+TH+TF+MXnet

    [框架安装趟雷指南]Ubuntu+1060+cuda+cudnn+Keras+TH+TF+MXnet https://zhuanlan.zhihu.com/p/23480983 天清 9 个月前 写这 ...

  5. 2019应届生,用python爬虫记录自己求职经历,分享求职中的一些坑

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  6. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  7. python爬虫成长之路(一):抓取证券之星的股票数据

    获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所 ...

  8. python爬虫学习(7) —— 爬取你的AC代码

    上一篇文章中,我们介绍了python爬虫利器--requests,并且拿HDU做了小测试. 这篇文章,我们来爬取一下自己AC的代码. 1 确定ac代码对应的页面 如下图所示,我们一般情况可以通过该顺序 ...

  9. python爬虫学习(6) —— 神器 Requests

    Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 H ...

随机推荐

  1. inux内核的编译与安装 (转)

    1.查看ubuntu版本号: xdj@xdj-MS-:~$ sudo lsb_release -a [sudo] password for xdj: No LSB modules are availa ...

  2. C# Code 非常好的学习博客

    https://ardalis.com/how-to-become-master-writing-c-code

  3. 第06章-渲染Web视图

    1. 理解视图解析 将控制器中请求处理的逻辑和视图中的渲染实现解耦是Spring MVC的一个重要特性.如果控制器中的方法直接负责产生HTML的话,就很难在不影响请求处理逻辑的前提下,维护和更新视图. ...

  4. bufferedReader与StringReader

    bufferedReader 这么说吧,这个类就是一个包装类,它可以包装字符流,将字符流放入缓存里,先把字符读到缓存里,到缓存满了或者你flush的时候,再读入内存,就是为了提供读的效率而设计的. S ...

  5. .net连接eDirectory,需要安全连接的解决方案

    用C#连接eDirectory ,提示: “这个请求需要一个安全的连接.” 解决办法,eDirectory禁用TLS(这方法比较猥琐) ssh连接到eDirectory服务器上,执行: ldapcon ...

  6. 建造者(Builder)模式 *

    一. 建造者(Builder)模式 建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 二. Builder模式的结构: 建造者(Bu ...

  7. 国外物联网平台(7):FogHorn

    国外物联网平台(7) ——FogHorn 马智 引言: 据外媒在本月20日报道,硅谷初创公司FogHorn正在与谷歌合作以简化工业物联网应用的部署.本文对FogHorn的技术.产品.应用和生态进行了分 ...

  8. 百度图片API

    转载请注明出处:http://blog.csdn.net/yuanwofei/article/details/16343743 一.通用api http://image.baidu.com/i?tn= ...

  9. Redis缓存穿透、缓存雪崩

    缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义. ...

  10. go语言 defer 你不知道的秘密!

    go 语言的defer功能强大,对于资源管理非常方便,但是如果没用好,也会有陷阱哦.我们先来看几个例子. 例一: defer 是先进后出 这个很自然,后面的语句会依赖前面的资源,因此如果先前面的资源先 ...