DebugLog实战         有时候我们需要在程序运行时,一边运行一边打印调试日志。此时需要开启DebugLog。         如何开启:         首先将debuglevel设置为1,然后用urllib.request.build_opener()创建自定义对象opener将debuglevel作为参数传入接着用urllib.request.install_opener()创建全局默认对象opener,进行后续操作。 import urllib.request #复制区----- httphd=urllib.request.HTTPHandler(debuglevel=1) httpshd=urllib.request.HTTPSHandler(debuglevel=1) opener=urllib.request.build_opener(httphd,httpshd) urllib.request.install_opener(opener) #-----复制区 data=urllib.request.urlopen("http://edu.51cto.com") 这样就可以边执行程序边打印调试Log日志。   异常处理神器——URLError实战     如何合理的处理异常:介绍两个类         URLError和他的一个子类HTTPError 实例1: import urllib.request import urllib.error try:     urllib.request.urlopen("http://blog.csdn.net") except urllib.error.URLError as e: #这里csdn禁止对文章爬取,所以没有模拟浏览爬会出现403错误 #由于触发了HTTPError产生的URLError异常,这里使用HTTPError替换亦可以, #但是HTTPError不能处理:连接不上服务器,远程url不存在、无网络的异常     print(e.code)     print(e.reason) 补充知识:状态码 200----一切正常 301----重定向到新的url,永久性 302----重定向到临时的url,非永久性 304----请求的资源未更新 400----非法请求 401----请求未经授权 403----禁止访问 404----没有找到对应页面 500----服务器内部出现错误 501----服务器不支持实现请求所需要的功能 实际上我们处理异常不知道使用HTTPError能不能处理。我们可以进行优化,先让HTTPError处理,不行再让URLError处理 代码如下: try:     urllib.request.urlopen("http://blog.baidusss.net")#不存在的网址 except urllib.error.HTTPError as e:     print(e.code)     print(e.reason) except urllib.error.URLError as e:     print(e.reason)   代码再改进,整合一下:不管何种原因都可以解决 try:     urllib.request.urlopen("http://blog.csdn.net") except urllib.error.URLError as e:     if hasattr(e,"code"):         print(e.code)     if hasattr(e,"reason"):         print(e.reason)   正则表达式入门     正则表达式就是描述字符串排列的一套规则。比如电子邮件、手机号的字符都是满足一定的规则的,我们可以用正则来表达他们的格式。在python中我们用re模块来实现正则。     基础知识:  NO1 、 原子: 正则的基本组成单位,每个正则中至少包含一个原子。     原子的类型:             1:普通字符 import re pattern="yue" string="http://yum.iqianyue.com" result1=re.search(pattern,string) print(result1) #结果:<_sre.SRE_Match object; span=(16, 19), match='yue'> 这里我们匹配两个字符串,成功匹配到了字符结果“yue”               2:非打印字符          指在一些字符串中用于格式控制的符号,如:  
符号 含义
\n 用于匹配一个换行符
\t 用于匹配一个制表符
import re   pattern="\n" string='''http://yum.iqianyue.com http://baidu.com''' result=re.search(pattern,string) print(result)                 3:通用字符  一个原子可以匹配一类字符  
符号 含义
\w 匹配任意一个字母、数字或下划线
\W 匹配除字母、下划线、数字以外的任意字符
\d 匹配任意一个十进制数
\D 匹配十进制以外的任意一个其他字符
\s 匹配任意一个空白字符
\S 匹配除空白字符以外的任意一个其他字符
             pattern="\w\dpython\w" string="abcdfphp345python_py" result=re.search(pattern,string) print(result) #结果<_sre.SRE_Match object; span=(9, 18), match='45python_'>         4:原子表   使用原子表定义一组地位相等的原子,匹配是会取原子表中任意一个原子进行匹配,在Python中原子表用[]表示 如[xyz]对应源字符是“xpython”如果用re.search匹配,就可以匹配到“xpy”,因为只要py的前一位是xyz的任一个原子就可以匹配成功        pattern1="\w\dpython[xyz]\w" string="abcdfphp345pythony_py" result=re.search(pattern1,string) print(result) #结果:<_sre.SRE_Match object; span=(9, 19), match='45pythony_'>      此文是我在学习《精通Python网络爬虫》(韦玮著)的总结,纯手打。                    
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄