Python学习 Day43 数据解析-BeautifulSoup 07

BeautifulSoup 解析数据

一、BeautifulSoup概述

1.BeautifulSoup

  • 是一个可以从HTML或XML文档中提取数据的Python库
  • 功能简单强大、容错能力高、文档相对完善,清晰易懂
  • 非Python标准模块,需要安装才能使用

2.安装方式

  • pip install bs4 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

3.测试方式

  • import bs4

4.解析器

BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果不安装第三方解析器,则Python会使用默认解析器

(1)标准库
  • 使用方法:BeautifulSoup(html,‘html.parser’)
  • 优点:内置标准库,速度适中,文档容错能力强
  • 缺点:Python3.2版本前的文档容错能力差
(2)lxml HTML
  • 使用方法:BeautifulSoup(html,‘lxml’)
  • 优点:速度快,文档容错能力强
  • 缺点:安装C语言库
(3)lxml XML
  • 使用方法:BeautifulSoup(html,‘xml’)
  • 优点:速度快,唯一支持XML
  • 缺点:安装C语言库
(4)html5lib
  • 使用方法:BeautifulSoup(html,‘html5lib’)
  • 优点:容错能力最强,可生成HTML5
  • 缺点:运行慢,扩展差

二、代码创建bs4对象

from bs4 import BeautifulSoup

#待解析的文档
html = '''
          <html>
                <head>
                        <title>水面清圆</title>
                </head>
                <body>
                        <h1 class = 'cur book' float = 'left'>一一风荷举</h1>
                        <a href = 'http://www.baidu.com'></a>
                        <h2><!--这里是注释--></h2>
                </body>
          </html>
'''

#选择一个解析器,创建bs对象
bs = BeautifulSoup(html,'lxml')
#获取标签
print(bs.title)
#获取h1标签的所有属性 列表形式存放多个属性值
print(bs.h1.attrs)
#获取单个属性
print(bs.h1.get('class')) #写法1
print(bs.h1['class'])     #写法2
#获取属性值
print(bs.a['href'])
#获取文本
print(bs.title.text)
print(bs.title.string)

#获取内容
print('text:',bs.h2.text)  #仅获取文本内容
print('string:',bs.h2.string)  #获取到h2标签中的所有内容
<title>水面清圆</title>
{
   
   'class': ['cur', 'book'], 'float': 'left'}
['cur', 'book']
['cur', 'book']
http://www.baidu.com
水面清圆
水面清圆
text: 
string: 这里是注释

Process finished with exit code 0

三、BS提取数据常用方法

(一)find()方法

  • 1.返回值类型:Tag
  • 2.功能:提取满足要求的首个数据
  • 3.语法:bs.find(标签,属性)
  • 4.举例:bs.find(‘div’,class_=‘books’)

(二)find_all()方法

  • 1.返回值类型:Tag
  • 2.功能:提取满足要求的所有数据
  • 3.语法:bs.find_all(标签,属性)
  • 4.举例:bs.find_all(‘div’,class_=‘books’)

(三)CSS选择器

  • 1.通过ID查找:bs.select(’#abc’)
  • 2.通过classa查找:bs.select(’.abc’)
  • 3.通过属性查找:bs.select(a[‘class=“abc”’])

(四)Tag对象

  • 1.获取标签:bs.title
  • 2.获取所有属性:bs.title.attrs
  • 3.获取单个属性的值:
    写法1: bs.div.get(‘class’)
    写法2: bs.div.[‘class’]
    写法3: bs.a(‘href’)

代码实现

from bs4 import  BeautifulSoup
#待解析的文档
html = '''

              <title>晴空一鹤排云上</title>
                  <div class = 'info' float = 'left'>便引诗情到碧霄</div>
                  <div class = 'info' float = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值