zoukankan      html  css  js  c++  java
  • 005 Python网络爬虫与信息提取 Beautiful Soup库入门

    Beautiful Soup库的中文文档https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#

    [A] Beautiful Soup库简介

        Beautiful Soup库,也叫 beautifulsoup4 库 或 bs4 库

        Beautiful Soup库可以对爬取的任何 html 和 XML 进行解析,它将爬取的内容当做一锅汤,可以巧妙地煲好这锅汤。

     

    [B] Beautiful Soup库安装

        1. Pycharm 库安装

        2. 在终端打开 python 运行环境,执行指令:pip install beautifulsoup4

     

    [C] Beautiful Soup库的而基本使用

    import requests
    
    # 1. 获取网站的html代码,存储在demo中
    url = 'http://python123.io/ws/demo.html'
    r = requests.get(url)
    demo = r.text
    print(type(demo))       # 返回<class 'str'>
    
    # 2. 利用bs库处理html代码
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(demo, 'html.parser')
    print(type(soup))       # 返回<class 'bs4.BeautifulSoup'>
    print(soup.prettify())    # 返回排列好的html代码(未被丑化的)
    View Code

     

    [D] Beautiful Soup库的基本元素

        1. Beautiful Soup库是解析,遍历,维护 "标签树" 的功能库,只要提供的是标签树,该库都能对其进行解析

        2. 首先,html代码 或者 标签树 被转化成BeautifulSoup类,然后就可以进行操作了

       Beautiful Soup 库解析器有四种:

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

       Beautiful Soup类的基本元素:

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

       

      BeautifulSoup类包含了所解析的html页面的所有信息,可以通过调用相应属性来获取指定内容

    import requests
    from bs4 import BeautifulSoup
    
    # 1. 首先通过requests库爬取html代码
    r = requests.get('http://python123.io/ws/demo.html')
    demo = r.text
    
    # 2. 煲汤
    soup = BeautifulSoup(demo, 'html.parser')

          1. BeautifulSoup类.标签名    通过标签名获取指定标签的内容,若有多个同类标签免责返回第一个

              如:soup.p  获取p标签的完整信息

                // 返回 <p class="title"><b>The demo python introduces several python courses.</b></p>

          2. BeautifulSoup类.标签名.name  获取指定标签的名字

              如:soup.p.name  获取p标签的名称

                // 返回 p

          3. BeautifulSoup类.标签名.attrs  获取指定标签的属性(即行内属性)

              如:soup.a.attrs  获取a标签的属性对象

                // 返回 {'href': 'http://www.icourse163.org/course/BIT-268001', 'class': ['py1'], 'id': 'link1'}

          4. BeautifulSoup类.标签名.string  获取指定标签内的内容字符串

              如:soup.p.string  获取指定标签内的文本内容(可穿透嵌套的标签

          5. BeautifulSoup类.标签名.string  获取指定标签内的注释部分

              如:soup.p.string    获取p标签终中的注释内容

            注意:4 和 5 方法一样但是获取的内容一个是内容信息,一个是注释信息,需要用type()方法来判断具体是哪一类信息

          6. BeautifulSoup类.text  或  BeautifulSoup类.p.text

              如:soup.text,soup.p.text  获取所解析内容的标签内的文本,或者指定标签内的文本,返回值为字符串

      

     [E] 基于bs 库的 HTML内容遍历方法

        1. HTML标签树,可以看作一个树结构

        2. 标签树的遍历分为三种方式:下行遍历,上行遍历和平行遍历

        3. 三种遍历方式图解如图:

        

        标签树的下行遍历:

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

         标签树的上行遍历:

    属性 说明
    .parent 节点的父亲标签
    .parents 节点先辈标签的迭代烈性,用于循环遍历先辈节点

              标签的上行遍历代码示例:

    import requests
    from bs4 import BeautifulSoup
    
    # 1. 首先通过requests库爬取html代码
    r = requests.get('http://python123.io/ws/demo.html')
    demo = r.text
    
    # 2. 煲汤
    soup = BeautifulSoup(demo, 'html.parser')
    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_siblings 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签

     [F] 基于bs4库的HTML格式输出和编码

       1. 如何让HTML页面更友好的显示

          prettify()方法,为HTML标签添加换行符,使得代码打印时的结构更加清晰

       2. bs4库将读入的任何HTML代码和字符串,都进行utf-8编码

     

     

     

  • 相关阅读:
    The Triangle_DP
    LITTLE SHOP OF FLOWERS_DP
    K Best(最大化平均数)_二分搜索
    Number Game_状态压缩
    Stockbroker Grapevine_Floyd
    A very hard Aoshu problem
    AOE 网络
    AOV网
    最小生成树
    [POJ] 1562 Oil Deposits (DFS)
  • 原文地址:https://www.cnblogs.com/carreyBlog/p/13991630.html
Copyright © 2011-2022 走看看