zoukankan      html  css  js  c++  java
  • 9、bs4

    '''
    BeautifulSoup4 即bs4,是一种解析器方法,将复杂html文档转换成一个复杂的树形结构,
    每个节点都是python对象,所有对象可以归纳为4中:
    - Tag
    - NavigableString
    - BeautifulSoup
    - Comment
    '''
    
    from bs4 import  BeautifulSoup
    
    file = open("./baidu.html","rb")
    html = file.read()
    bs = BeautifulSoup(html,"html.parser") ## 使用parser解析器将html解析为一种树形结构
    
    #1.Tag  标签及其内容:拿到所找到的第一个内容
    ## 打印出第一个标签及标签的内容
    print(bs.title)
    print(bs.head)
    print(bs.a)
    print(type(bs.a))   ## 类型为:<class 'bs4.element.Tag'>
    
    
    ## 2.NavigableString 标签里的内容
    print(bs.a.string)
    print(type(bs.a.string))    ## 类型为:<class 'bs4.element.NavigableString'>
    print(bs.a.attrs)           ## 取标签中的属性及值
    
    ## 3.BeautifulSoup 表示整个文档
    print(type(bs))         ## 类型为:<class 'bs4.BeautifulSoup'>
    print(bs.name)          ##[document]
    print(bs.attr)          ## None
    
    ## bs是整个文档内容,因此直接对bs操作即可
    print(bs)
    
    ## 4.Comment  是一个特殊的NavigableString,会将注释当做内容,但不会输出注释符号
    print(bs.a.string)
    print(type(bs.a.string))
    
    ## 以上均为介绍
    ## --------------------
    ## 以下为应用
    # 1、文档的遍历
    print(bs.head.contents[1])  ## 返回head的内容,以列表形式给出
    print(bs.head.contents[1])  ## 取列表的第一个值
    ## 更多内容,可在搜索文档实现
    
    # 2、文档的搜索
    ## 需要的内容如何定位
    ## 1) find_all() 按标签查找方法,查找所有
    ## 字符创过滤:会查找与字符串完全匹配的内容
    t_list = bs.find_all("a")       ## 查找所有的a标签链接内容,列表形式给出
    print(t_list)
    
    ## 2)find_all之 search()方法,按标签中含有的内容匹配查找的方法
    import re
    ## 引入正则表达式
    t_list = bs.find_all(re.compile("a"))   ## 标签中含有a,如head标签机器内容
    print(t_list)
    
    ## 3) find_all之 自定义函数方法,传入一个函数(方法),根据函数的要求搜索
    def name_is_exits(tag):
        return tag.has_attr("name") ## 标签中含有name属性的
    
    t_list = bs.find_all(name_is_exits)
     for item in t_list:
         print(item)
    
    # 2、kwargs 参数
    t_list = bs.find_all(id="head")
    t_list = bs.find_all(class_=True)   ## 这里的class_表示有class这个类
    t_list = bs.find_all(href="http://news.baidu.com")
    for item in t_list:
         print(item)
    
    # 3、text参数
     t_list = bs.find_all(text = "hao123")
     t_list = bs.find_all(text = ["hao123","地图","贴吧","李老师"])
     t_list = bs.find_all(text=re.compile("d"))     ## 正则表达式来查找包含特定文本的内容(d表示标签里的字符串)
     for item in t_list:
          print(item)
    
    
    # 4、limit 限制获取的个数
     t_list = bs.find_all("a",limit=3)       ## 限制获取的个数
     for item in t_list:
          print(item)
    
    # css 选择器
    t_list = bs.select("title")  ## 通过指定标签查找
    t_list = bs.select(".mnav")     ##通过指定类名查找,.表示类
    t_list = bs.select("#u1")       ## 按照id来查找 <div id="u1">
    t_list = bs.select("head > title") ## 通过字标签来查找
    t_list = bs.select(".mnav ~ .bri")  ## 通过同级的兄弟来查找
    for item in t_list:
         print(item)
    
  • 相关阅读:
    ios awakeFromNib 和 initWithCoder:
    iOS 关于iphone6 和 iphone6 plus 的适配
    iOS 目录的使用
    iOS 8 WKWebView 知识点
    iOS 动画结束后 view的位置 待完善
    iOS coredata 数据库升级 时报Can't find model for source store
    iOS 真机文件系统区分大小写,而模拟器可能不区分
    iOS coredata 级联删除
    iOS 关于AFNetworking ssl 待完成
    iOS 关于UIWindow的理解
  • 原文地址:https://www.cnblogs.com/moox/p/13199458.html
Copyright © 2011-2022 走看看