• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python爬虫之异常捕获及标签过滤详解

    增加异常捕获,更容易现问题的解决方向

    import ssl
    import urllib.request
    from bs4 import BeautifulSoup
    from urllib.error import HTTPError, URLError
     
     
    def get_data(url):
        headers = {"user-agent":
                       "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
                   }
        ssl._create_default_https_context = ssl._create_unverified_context
     
        """
        urlopen处增加两个异常捕获:
                1、如果页面出现错误或者服务器不存在时,会抛HTTP错误代码
                2、如果url写错了或者是链接打不开时,会抛URLError错误
        """
        try:
            url_obj = urllib.request.Request(url, headers=headers)
            response = urllib.request.urlopen(url_obj)
            html = response.read().decode('utf8')
        except (HTTPError, URLError)as e:
            raise e
     
        """
        BeautifulSoup处增加异常捕获是因为BeautifulSoup对象中有时候标签实际不存在时,会返回None值;
        因为不知道,所以调用了就会导致抛出AttributeError: 'NoneType' object has no xxxxxxx。
        """
        try:
            bs = BeautifulSoup(html, "html.parser")
            results = bs.body 
        except AttributeError as e:
            return None
     
        return results
     
     
    if __name__ == '__main__':
        print(get_data("https://movie.douban.com/chart"))
    

    解析html,更好的实现数据展示效果

    # 此处代码同上面打开url代码一致,故此处省略......
     
    html = response.read().decode('utf8')
    bs = BeautifulSoup(html, "html.parser")
    data = bs.find('span', {'class': 'pl'})
    print(f'电影评价数:{data}')
    print(f'电影评价数:{data.get_text()}')
    

    运行后的结果显示如下:

    电影评价数:span class="pl">(38054人评价)/span>
    电影评价数:(38054人评价)

    实际find方法封装是调用了正则find_all方法,把find_all中的limt参数传1,获取单个标签

    1.name:可直接理解为标签元素

    2.attrs:字典格式,放属性和属性值 {"class": "indent"}

    3.recursive:递归参数,布尔值,为真时递归查询子标签

    4.text:标签的文本内容匹配 , 是标签的文本,标签的文本

    使用方法适合find一样的,无非就是多了个limit参数(筛选数据)

    必须注意的小知识点:

    #   下面两种写法,实际是一样的功能,都是查询id为text的属性值
    bs.find_all(id="text")
    bs.find_all(' ', {"id": "text"})
    #   如果是class的就不能class="x x x"了,因为class是python中类的关键字
    bs.find_all(class_="text")
    bs.find_all(' ', {"class": "text"})

    到此这篇关于python爬虫之异常捕获及标签过滤详解的文章就介绍到这了,更多相关python异常捕获及标签过滤内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • python爬虫之selenium库的安装及使用教程
    • Python中selenium库的用法详解
    • Python Selenium库的基本使用教程
    • Python爬虫之Selenium库的使用方法
    • python中selenium库的基本使用详解
    • Python中Selenium库使用教程详解
    • Requests什么的通通爬不了的Python超强反爬虫方案!
    • Python爬虫之获取心知天气API实时天气数据并弹窗提醒
    • 快速搭建python爬虫管理平台
    • Python爬虫基础之selenium库的用法总结
    上一篇:python使用tkinter实现透明窗体
    下一篇:Keras 如何修改图片通道的顺序
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python爬虫之异常捕获及标签过滤详解 python,爬虫,之,异常,捕获,