• 02-3解析BeautifulSoup


    一、基本简介

    1. BeautifulSoup简称:bs4
    2. 什么是BeatifulSoup?
       BeautifulSoup,和lxml一样,是一个html的解析器,主要功能也是解析和提取数据
    3. 优缺点?
       缺点:效率没有lxml的效率高
       优点:接口设计人性化,使用方便

    二、安装以及创建

    1. 安装
    pip install bs4
    
    • 1
    1. 导入
    from bs4 import BeautifulSoup
    
    • 1
    1. 创建对象
    • 服务器响应的文件生成对象
    soup = BeautifulSoup(response.read().decode(), 'lxml')
    
    • 1
    • 本地文件生成对象
    soup = BeautifulSoup(open('1.html'), 'lxml')
    
    • 1

    注意:默认打开文件的编码格式gbk所以需要指定打开编码格式

    三、节点定位

    1. 根据标签名查找节点
      soup.a 【注】只能找到第一个a
        soup.a.name
        soup.a.attrs

    2. 函数
      (1)find(返回一个对象)
        find('a'):只找到第一个a标签
        find('a', title='名字')
        find('a', class_='名字')

    (2)find_all(返回一个列表)
      find_all('a') 查找到所有的a
      find_all(['a', 'span']) 返回所有的a和span
      find_all('a', limit=2) 只找前两个a
    (3)select(根据选择器得到节点对象)【推荐】

    在这里插入图片描述
    4.节点信息
    在这里插入图片描述

    本地文件

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
    
        <div>
            <ul>
                <li id="l1">张三li>
                <li id="l2">李四li>
                <li>王五li>
                <a href="" id="" class="a1">尚硅谷a>
                <span>嘿嘿嘿span>
            ul>
        div>
    
    
        <a href="" title="a2">百度a>
    
        <div id="d1">
            <span>
                哈哈哈
            span>
        div>
    
        <p id="p1" class="p1">呵呵呵p>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    爬虫文件

    
    
    from bs4 import BeautifulSoup
    
    
    # 通过解析本地文件 来将bs4的基础语法进行讲解
    # 默认打开的文件的编码格式是gbk 所以在打开文件的时候需要指定编码
    soup = BeautifulSoup(open('075_尚硅谷_爬虫_解析_bs4的基本使用.html',encoding='utf-8'),'lxml')
    
    # 根据标签名查找节点
    # 找到的是第一个符合条件的数据
    # print(soup.a)
    # 获取标签的属性和属性值
    # print(soup.a.attrs)
    
    # bs4的一些函数
    # (1)find
    # 返回的是第一个符合条件的数据
    # print(soup.find('a'))
    
    # 根据title的值来找到对应的标签对象
    # print(soup.find('a',title="a2"))
    
    # 根据class的值来找到对应的标签对象  注意的是class需要添加下划线
    # print(soup.find('a',class_="a1"))
    
    
    # (2)find_all  返回的是一个列表 并且返回了所有的a标签
    # print(soup.find_all('a'))
    
    # 如果想获取的是多个标签的数据 那么需要在find_all的参数中添加的是列表的数据
    # print(soup.find_all(['a','span']))
    
    # limit的作用是查找前几个数据
    # print(soup.find_all('li',limit=2))
    
    
    # (3)select(推荐)
    # select方法返回的是一个列表  并且会返回多个数据
    # print(soup.select('a'))
    
    # 可以通过.代表class  我们把这种操作叫做类选择器
    # print(soup.select('.a1'))
    
    # print(soup.select('#l1'))
    
    
    # 属性选择器---通过属性来寻找对应的标签
    # 查找到li标签中有id的标签
    # print(soup.select('li[id]'))
    
    # 查找到li标签中id为l2的标签
    # print(soup.select('li[id="l2"]'))
    
    
    # 层级选择器
    #  后代选择器
    # 找到的是div下面的li
    # print(soup.select('div li'))
    
    # 子代选择器
    #  某标签的第一级子标签
    # 注意:很多的计算机编程语言中 如果不加空格不会输出内容  但是在bs4中 不会报错 会显示内容
    # print(soup.select('div > ul > li'))
    
    
    # 找到a标签和li标签的所有的对象
    # print(soup.select('a,li'))
    
    # 节点信息
    #    获取节点内容
    # obj = soup.select('#d1')[0]
    # 如果标签对象中 只有内容 那么string和get_text()都可以使用
    # 如果标签对象中 除了内容还有标签 那么string就获取不到数据 而get_text()是可以获取数据
    # 我们一般情况下  推荐使用get_text()
    # print(obj.string)
    # print(obj.get_text())
    
    # 节点的属性
    # obj = soup.select('#p1')[0]
    # name是标签的名字
    # print(obj.name)
    # 将属性值左右一个字典返回
    # print(obj.attrs)
    
    # 获取节点的属性
    obj = soup.select('#p1')[0]
    
    print(obj.attrs.get('class'))
    print(obj.get('class'))
    print(obj['class'])
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
  • 相关阅读:
    Google Chrome(谷歌浏览器)安装使用
    图像处理ASIC设计方法 笔记5 图像卷积器硬件结构
    swagger 生成代码
    DPU网络开发SDK——DPDK(一)
    内网windows实现同步时钟
    【2022中国高校计算机大赛 微信大数据挑战赛】Top 1-6 方案总结
    基于数据驱动的变电站巡检机器人自抗扰控制
    第十四章·享元模式
    中国各地级市的银行金融机构网点数据(2007-2022年)
    超详细的数据结构---顺序表的有关教程
  • 原文地址:https://blog.csdn.net/m0_51366201/article/details/134470146