美文网首页
beautifulsoup 库(一)

beautifulsoup 库(一)

作者: Peng_001 | 来源:发表于2020-05-23 10:08 被阅读0次

    beautifulsoup(简称bs) 是解析、遍历、维护“标签树”的功能库。

    标签概要


    只要提供的是标签类型,bs 对它都可以做很好的解析。

    bs 的引用

    from bs4 import BeautifulSoup # 从bs4 库中引用BeautifulSoup 类
    # 也可以直接引用bs4
    import bs4
    

    BeautifulSoup 类

    bs 类就是一个可以代表标签树的类型。
    甚至可以认为html 文档,标签树,bs类,这三者是等价的。

    在这个基础上,我们就可以通过bs类,使得标签树形成了一个变量,通过对变量的处理。

    简单来说,我们可以把beautiful soup 类当作一个HTML/XML 文档的全部内容。

    bs的解析器

    from bs4 import BeautifulSoup
    
    mk = '<html>data</html>'
    
    BeautifulSoup(mk, 'html.parser') # bs4的HTML解析器
    
    BeautifulSoup(mk, 'lxml') # lxml的HTML解析器
    
    BeautifulSoup(mk, 'xml') # lxml的XML解析器
    
    BeautifulSoup(mk, 'html5lib') # html5lib的解析器
    

    bs的基本元素

    <p class = ' '>...</p> 其中<></> 标注开头结尾,为tag。
    p 为name。
    class 为attributes信息,且为字典格式。
    ... 为NavigableString,是标签内的非属性字符串。
    标签内的注释部分为一种特殊的Comment类型。

    我们可以通过requests获得页面内容,接着将页面文本内容通过bs 解析。

    from bs4 import BeautifulSoup
    import requests
    
    r = requests.get('https://python123.io/ws/demo.html')
    demo = r.text
    soup = BeautifulSoup(demo, "html.parser")
    

    可以直接查看soup信息

    >>> soup
    <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 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>
    </body></html>
    

    Tag

    通过上述soup 的解析内容,我们可以获得各种类型的标签。
    1)title: soup.title 标题标签

    >>> soup.title
    <title>This is a python demo page</title>
    

    2)a:soup.a 链接标签

    >>> soup.a
    <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>
    

    任何存在于html 语法的标签,都可以使用soup.tag 方式访问获得。
    当html 存在多个相同的tag 标签时,soup.tag 可以返回其中的第一个。

    Name

    获得某个标签的名字。返回值为字符串形式。

    soup.title.name
    'title'
    

    其实按照之前的html 标签概要也不难发现,html 是存在一定的结构关系的。因此我们可以尝试获取某个标签的父标签。
    可以得知a的父标签为p标签。

    >>> soup.a.parent.name
    'p' 
    

    Attributes

    属性为字典形式的内容。
    我们可以查看a标签的属性。

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

    我们还可以对每个属性进行提取。利用字典的提取方法。

    soup.a.attrs['class']
    

    无论有没有属性,我们都可以获得字典(没有就是空字典)。

    NavigableString

    获得尖扩号中的内容。

    >>> soup.p.string
    'The demo python introduces several python courses.'
    

    可以发现,我们打印出的string,并不包含b 标签。(b 为p的子标签)这说明NavigableString 可以跨越多个标签层次。

    Comment

    表示注释部分。
    在html 表达中用下面方式来包含注释信息,并与NavigableString在相同的位置,即两个<>之间。

    <!--...-->
    

    但当我们调用标签中的注释信息时,它也没有什么不同。因此有些时候需要根据类型来对标签中的string 进行区分。

    小结

    可以将name, attributes, navigablestring, comment都看作是tag 下的详细组成结构。


    相关文章

      网友评论

          本文标题:beautifulsoup 库(一)

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