美文网首页
Python之Beautiful Soup库

Python之Beautiful Soup库

作者: 红茶绅士 | 来源:发表于2017-08-11 16:18 被阅读28次
    • Beautiful Soup库是解析、遍历、维护“标签树”的功能库
    • BeautifulSoup对应一个HTML/XML文档的全部内容
    • Beautiful Soup库也叫beautifulsoup4 或 bs4 约定引用方式如下,即主要是用BeautifulSoup类
    from bs4 import BeautifulSoup
    import bs4
    

    安装

    pip install beautifulsoup4

    解析器

    解析器 使用方法 条件
    bs4的HTML解析器 BeautifulSoup(mk,'html.parser') 安装bs4库
    lxml的HTML解析器 BeautifulSoup(mk,'lxml') pip install lxml
    lxml的XML解析器 BeautifulSoup(mk,'xml') pip install lxml
    html5lib的解析器 BeautifulSoup(mk,'html5lib') pip install html5lib

    基本元素

    基本元素 说明
    Tag 标签,最基本的信息组织单元,分别用<>和</>标明开头和结尾
    Name 标签的名字,<p>...</p>的名字是'p',格式:<tag>.name
    Attributes 标签的属性,字典形式组织,格式:<tag>.attrs
    NavigableString 标签内非属性字符串,<>...</>中字符串,格式:<tag>.string
    Comment 标签内字符串的注释部分,一种特殊的Comment类型

    使用方法

    import requests
    from bs4 import BeautifulSoup
    
    r = requests.get("http://python123.io/ws/demo.html")
    demo = r. text
    soup = BeautifulSoup(demo, 'html.parser')
    
    tag
    print(soup.title)
    print(soup.a)
    
    name
    print(soup.a.name)
    print(soup.a.parent.name)
    
    
    attrs(属性)
    print(soup.a.attrs)
    print(soup.a.attrs['class'])
    print(type(soup.a.attrs))
    
    NavigableString
    print(soup.p)
    print(soup.p.string)
    print(type(soup.p.string))
    
    Comment
    #newsoup = BeautifulSoup("<b><!--This is a comment.--></b><p>This is not a comment</p>","html.parser")
    print(newsoup.b.string)
    print(type(newsoup.b.string)
    print(newsoup.p.string)
    print(type(newsoup.p.string))
    

    HTML的内容遍历

    HTML基本格式@2x.png
    HTML树形结构@2x.png 遍历图解@2x.png
    下行遍历
    属性 说明
    .contents 子节点的列表,将<tag>所有儿子节点存入列表
    .children 子节点的迭代类型,与.contents类似,用于循环遍历儿子节点
    .descendants 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历
    print(soup.head)
    print(soup.head.contents)
    print(soup.body.contents)
    print(len(soup.body.contents))
    print(soup.body.contents[1])
    
    # 遍历儿子节点
    for child in soup.body.children:
        print(child)
    
    # 遍历子孙节点
    for child in soup.body.descendants:
        print(child)
    
    上行遍历
    属性 说明
    .parent 节点的父亲标签
    .parents 节点先辈标签的迭代类型,用于循环遍历先辈节点
     print(soup.title.parent)
    
     for parent in soup.a.parents:
        if parent is None:
            print(parent)
        else:
            print(parent.name)
    
    平行遍历
    属性 说明
    .next_sibling 返回按照HTML文本顺序的下一个平行节点标签
    .previous_sibling 返回按照HTML文本顺序的上一个平行节点标签
    .next_siblings 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签
    .previous_sibling 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签
    print(soup.a.next_sibling)
    print(soup.a.next_sibling.next_sibling)
    print(soup.a.previous_sibling)
    print(soup.a.previous_sibling.previous_sibling)
    print(soup.a.parent)
    
    
    # 遍历后续节点
    for sibling in soup.a.next_siblings:
        print(sibling)
    
    # 遍历前续节点
    for sibling in soup.a.previous_siblings:
        print(sibling)
    

    格式输出

    bs4库的prettify()方法:
    • .prettify()为HTML文本<>及其内容增加更加'\n'
    • .prettify()可用于标签,方法:<tag>.prettify()
    print(soup.prettify())
    print(soup.a.prettify())
    
    bs4库的编码
    • bs4库将任何HTML输入都变成utf‐8编码
    • Python 3.x默认支持编码是utf‐8,解析无障碍

    相关文章

      网友评论

          本文标题:Python之Beautiful Soup库

          本文链接:https://www.haomeiwen.com/subject/ketrrxtx.html