zoukankan      html  css  js  c++  java
  • Beautiful Soup库整理

    Beautiful Soup库是解析、遍历、维护“标签树”的功能库

    一、安装

    命令行执行

    pip install beautifulsoup4

    python环境执行

    from bs4 import BeautifulSoup

    若不报错,这证明安装成功

    二、BeautifulSoup库解析器

    解析器 使用方法 条件
    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

    三、BeautifulSoup类的基本元素

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

     

    代码示例如下:

    >>> from bs4 import BeautifulSoup
    >>> import requests
    >>> r = requests.get('http://python123.io/ws/demo.html')
    >>> demo = r.text
    >>> demo
    '<html><head><title>This is a python demo page</title></head>
    <body>
    <p class="title"><b>The demo python introduces several python courses.</b></p>
    <p class="course">Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:
    <a href="http://www.icourse163.org/course/BIT-268001" class="py1" id="link1">Basic Python</a> and <a href="http://www.icourse163.org/course/BIT-1001870001" class="py2" id="link2">Advanced Python</a>.</p>
    </body></html>'
    >>> soup = BeautifulSoup(demo, "html.parser") # 创建BeautifulSoup类
    >>> soup.title # 获取title标签
    <title>This is a python demo page</title>
    # 任何存在于HTML语法中的标签都可以用soup.<tag>访问获得 当HTML文档中存在多个相同<tag>对应内容时,soup.<tag>返回第一个 >>> soup.a # 获取a标签 <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a> >>> soup.a.name # 获取标签的名字 'a'
    >>> soup.a.parent # 获取标签的父亲 <p class="course">Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses: <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a> and <a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python</a>.</p> >>> soup.a.parent.name 'p' >>> soup.a.parent.parent.name 'body'
    >>> tag = soup.a >>> tag.attrs # 获取标签的属性 {'href': 'http://www.icourse163.org/course/BIT-268001', 'class': ['py1'], 'id': 'link1'} >>> tag.attrs['href'] 'http://www.icourse163.org/course/BIT-268001'
    >>> type(tag) <class 'bs4.element.Tag'>
    >>> soup.a.string # 标签包裹的内容 'Basic Python' >>> soup.p.string 'The demo python introduces several python courses.' >>> type(soup.p.string) <class 'bs4.element.NavigableString'>
    >>> soup.prettify() # html格式化输出

     注意:任何存在于HTML语法中的标签都可以用soup.<tag>访问获得 当HTML文档中存在多个相同<tag>对应内容时,soup.<tag>返回第一个

    四、html的内容遍历

    在BeautifulSoup对象通过给定的html字符串构建了一个标签树,如图

    对于标签树的遍历,有如下方法

    1.标签树的下行遍历

    • .contents  子节点的列表,将<tag>所有儿子节点存入列表 
    • .children  子节点的迭代类型,与.contents类似,用于循环遍历儿子节点 
    • .descendants  子孙节点的迭代类型,包含所有子孙节点,用于循环遍历

     2.标签树的上行遍历

    • .parent  节点的父亲标签 
    • .parents  节点先辈标签的迭代类型,用于循环遍历先辈节点

      PS:在遍历所有先辈节点是,同时包括了soup本身

    3.标签树的平行遍历

    • .next_sibling  返回按照HTML文本顺序的下一个平行节点标签 
    • .previous_sibling  返回按照HTML文本顺序的上一个平行节点标签 
    • .next_siblings  迭代类型,返回按照HTML文本顺序的后续所有平行节点标签 
    • .previous_siblings  迭代类型,返回按照HTML文本顺序的前续所有平行节点标签

    ----

    本文整理自嵩天老师的python相关课程,若有错误,还请斧正

  • 相关阅读:
    Linux0.11内核--fork进程分析
    Linux0.11内核--内存管理之1.初始化
    Linux0.11内核--进程调度分析之2.调度
    Linux0.11内核--进程调度分析之1.初始化
    github
    推荐大家一个靠谱的论文检测平台。重复的部分有详细出处以及具体修改意见,能直接在文章上做修改,全部改完一键下载就搞定了。他们现在正在做毕业季活动, 赠送很多免费字数,可以说是十分划算了!地址是:https://www.paperpass.com/
    妈妈再也不用担心我找idea激活码了
    eclipse集成tomcat
    DNS--localhost
    RFC 2819)第5节"Definitions"除外的全部内容
  • 原文地址:https://www.cnblogs.com/tcctw/p/9657903.html
Copyright © 2011-2022 走看看