zoukankan      html  css  js  c++  java
  • python爬虫第三天

     
     
    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:非打印字符 
            指在一些字符串中用于格式控制的符号,如:
     
    符号 含义
    用于匹配一个换行符
    用于匹配一个制表符
    import re
     
    pattern=" "
    string='''http://yum.iqianyue.com
    http://baidu.com'''
    result=re.search(pattern,string)
    print(result)
     
     
                3:通用字符 
    一个原子可以匹配一类字符
     
    符号
    含义
    w
    匹配任意一个字母、数字或下划线
    W
    匹配除字母、下划线、数字以外的任意字符
    d
    匹配任意一个十进制数
    D
    匹配十进制以外的任意一个其他字符
    s
    匹配任意一个空白字符
    S
    匹配除空白字符以外的任意一个其他字符
     
              
    pattern="wdpythonw"
    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="wdpython[xyz]w"
    string="abcdfphp345pythony_py"
    result=re.search(pattern1,string)
    print(result)
    #结果:<_sre.SRE_Match object; span=(9, 19), match='45pythony_'>
     
     
     此文是我在学习《精通Python网络爬虫》(韦玮著)的总结,纯手打。
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    python3-基础11
    python3-基础10
    python3-基础9
    python3-基础8
    python3-基础7
    python3-基础6
    phaserjs 总结
    ES6总结
    移动端webview调试
    nodejs的理解
  • 原文地址:https://www.cnblogs.com/yang4869/p/10325961.html
Copyright © 2011-2022 走看看