bs4

BeatifulSoup
什么是BeatifulSoup

BeautifulSoup,和lxml一样,是一个html的解析器
主要功能也是解析和提取数据

优缺点

效率没有lxml的效率高
接口设计人性化,使用方便

安装

pip install bs4

导入

from bs4 import BeautifulSoup

创建对象

网上文件生成对象
    soup = BeautifulSoup(‘网上下载的字符串’, ‘lxml’)

本地文件生成对象
    soup = BeautifulSoup(open(‘filename.html’), ‘lxml’)

节点定位

根据标签名查找节点

    soup.a 【注】只能找到第一个a

    查找所有a标签节点

函数

    find(返回一个对象)

    【注】

        不能使用name属性查找

        class_后面有下划线

    3.可以使用自定义属性,比如age

        find(‘a’):只找到第一个a标签

        find(‘a’, title=‘名字’)

        find(‘a’, id=‘名字’)

        find(‘a’, class_=‘名字’)

        #需要重点注意_

    find_all(返回一个列表)
        find_all(‘a’) 查找到所有的a
        find_all([‘a’, ‘span’]) 返回所有的a和span
        find_all(‘a’, limit=2) 只找前两个a

    select(根据选择器得到节点对象)【推荐】

    在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素。

    select选择器,接受一个以字符串表示的路径

    “//div[@class]”

        element

        div

            p

            选择所有

            元素。

        .class

        [@class =]
        @class

            .firstname

            选择 class=“firstname” 的所有元素

        #id

        [@id=]
        @id

            #firstname

            选择 id=“firstname” 的所有元素

        属性选择器

            [attribute]

                [target]

                选择带有 target 属性所有元素
                eg.
                li[class] 选择带有class属性的所有li标签

            [attribute=value]

                [target=blank]

                选择 target=“blank” 的所有元素。

                div[target=blank]

        层级选择器

            element element

                div p

                类似xpath中的//

                选择
                元素内部的所有

                元素

            element>element

                div>p

                选择
                元素的所有直接子

                元素。

            element,element

                div,p

                选择所有
                元素和所有

                元素
                所有标签在同一个双引号中

获取子孙节点

    contents:返回的是一个列表

    【注意】中间也会得到很多的换行符

    descendants:返回的是一个生成器

节点信息

获取节点内容

    obj.string

    obj.get_text()【推荐】

    这是一个段落

节点的属性

    tag.name 获取标签名

    tag = find('li)
    tag.name

    tag.attrs将属性值作为一个字典返回

    {属性名称:属性值}

获取节点属性
    obj.attrs.get(‘title’)
    obj.get(‘title’)
    obj[‘title’]

节点类型

判断节点类型

import bs4

ul_list = soup.ul.contents
for ul in ul_list:

print(type(ul),str(ul))

if type(ul) == bs4.element.Tag:
print(ul)

bs4.BeautifulSoup 根节点类型
bs4.element.NavigableString 连接类型
bs4.element.Tag 节点类型
bs4.element.Comment 注释类型

————————————————
版权声明:本文为CSDN博主「桔子言」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bbbbb1996/article/details/101636313

你可能感兴趣的:(bs4)