• python bs4库


    Beautiful Soup parses anything you give it, and does the tree traversal stuff for you.

    BeautifulSoup库是解析、遍历、维护 “标签树” 的功能库(遍历,是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问)。https://www.crummy.com/software/BeautifulSoup

    BeautifulSoup库我们常称之为bs4,导入该库为:from bs4 import BeautifulSoup。其中,import BeautifulSoup即主要用bs4中的BeautifulSoup类。

    bs4库解析器

    BeautifulSoup类的基本元素

     1 import requests
     2 from bs4 import BeautifulSoup
     3 
     4 res = requests.get('http://www.pmcaff.com/site/selection')
     5 soup = BeautifulSoup(res.text,'lxml')
     6 print(soup.a)
     7 # 任何存在于HTML语法中的标签都可以用soup.<tag>访问获得,当HTML文档中存在多个相同<tag>对应内容时,soup.<tag>返回第一个。
     8 
     9 print(soup.a.name)
    10 # 每个<tag>都有自己的名字,可以通过<tag>.name获取,字符串类型
    11 
    12 print(soup.a.attrs)
    13 print(soup.a.attrs['class'])
    14 # 一个<tag>可能有一个或多个属性,是字典类型
    15 
    16 print(soup.a.string)
    17 # <tag>.string可以取到标签内非属性字符串
    18 
    19 soup1 = BeautifulSoup('<p><!--这里是注释--></p>','lxml')
    20 print(soup1.p.string)
    21 print(type(soup1.p.string))
    22 # comment是一种特殊类型,也可以通过<tag>.string取到

    运行结果:

    <a class="no-login" href="">登录</a>

    a

    {'href': '', 'class': ['no-login']} ['no-login']

    登录

    这里是注释

    <class 'bs4.element.Comment'>

    bs4库的HTML内容遍历

    HTML的基本结构

    标签树的下行遍历

    其中,BeautifulSoup类型是标签树的根节点。

    1 # 遍历儿子节点
    2 for child in soup.body.children:
    3     print(child.name)
    4 
    5 # 遍历子孙节点
    6 for child in soup.body.descendants:
    7     print(child.name)

    标签树的上行遍历

    1 # 遍历所有先辈节点时,包括soup本身,所以要if...else...判断
    2 for parent in soup.a.parents:
    3     if parent is None:
    4         print(parent)
    5     else:
    6         print(parent.name)

    运行结果:

    div

    div

    body

    html

    [document]

    标签树的平行遍历

    1 # 遍历后续节点
    2 for sibling in soup.a.next_sibling:
    3     print(sibling)
    4 
    5 # 遍历前续节点
    6 for sibling in soup.a.previous_sibling:
    7     print(sibling)

    bs4库的prettify()方法

    prettify()方法可以将代码格式搞的标准一些,用soup.prettify()表示。在PyCharm中,用print(soup.prettify())来输出。

  • 相关阅读:
    unity远程修改游戏配置
    object与byte[]的相互转换、文件与byte数组相互转换
    c#实现gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
    Unity5.x在mac下的破解
    unity Socket TCP连接案例(一)
    Codeforces Edu Round 60 A-E
    Codeforces Edu Round 59 A-D
    Codeforces Edu Round 58 A-E
    Codeforces Edu Round 57 A-D
    Codeforces Edu Round 56 A-D
  • 原文地址:https://www.cnblogs.com/ltn26/p/10983836.html
Copyright © 2020-2023  润新知