python爬虫-13-python获取数据之BeautifulSoup4库(上)

有人说了,有没有更加简单的方式来获取Html中的相关数据呢?python发言了,当然有了,且看BeautifulSoup4

1、BeautifulSoup4是干啥的

BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库,它通过转换器实现文档导航,查找,修改文档的方式。

lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据。

但是BeautifulSoup有一个不可避免的劣势,那就是它是将所有的html代码读取到内存中进行操作的,如果你的html代码格外的大的话,可能不太适合。

2、安装BeautifulSoup

pip install bs4 -i https://pypi.tuna.tsinghua.edu.cn/simple

3、解析工具对比

工具 速度 易难度
lxml
Beautifulsoup
正则 最快

至于要使用哪种方式,那就看事宜情况了,自己衡量下哪种最合适,通过正则的方式的话我们后面也会介绍。

4、BeautifulSoup上手

from bs4 import BeautifulSoup

html = """
职位名称 职位类别 人数 地点 发布时间
""" Jier = BeautifulSoup(html, 'lxml') print(Jier.prettify())

输出结果如下:


 
  
职位名称 职位类别 人数 地点 发布时间

我们从输出结果来看的话,BeautifulSoup可以筛选出所有的html代码,并进行html代码补全。

5、从示例来了解

首先我们来一个html代码的示例,后面我们的操作都在此html代码的基础上进行操作。

Html = """
职位名称 职位类别 人数 地点 发布时间
22989-金融云区块链高级研发工程师(深圳) 技术类 1 深圳 2021-11-25
22989-金融云高级后台开发 技术类 2 深圳 2021-11-25
SNG16-腾讯音乐运营开发工程师(深圳) 技术类 2 深圳 2021-11-25
SNG16-腾讯音乐业务运维工程师(深圳) 技术类 1 深圳 2021-11-25
TEG03-高级研发工程师(深圳) 技术类 1 深圳 2021-11-24
TEG03-高级图像算法研发工程师(深圳) 技术类 1 深圳 2021-11-24
TEG11-高级AI开发工程师(深圳) 技术类 4 深圳 2021-11-24
15851-后台开发工程师 技术类 1 深圳 2021-11-24
15851-后台开发工程师 技术类 1 深圳 2021-11-24
SNG11-高级业务运维工程师(深圳) 技术类 1 深圳 2021-11-24
"""

(5.1)获取html中所有的tr标签

from bs4 import BeautifulSoup

Jier = BeautifulSoup(Html, 'lxml')
Suner = Jier.find_all('tr')
for tr in Suner:
    print(tr)
    print('=' * 20)

输出结果如下(篇幅问题,只写部分信息):


职位名称
职位类别
人数
地点
发布时间

====================

22989-金融云区块链高级研发工程师(深圳)
技术类

(5.2)获取html页面中的第二个tr标签

from bs4 import BeautifulSoup

Jier = BeautifulSoup(Html, 'lxml')
Suner = Jier.find_all('tr', limit=2)[1]
print(Suner)

输出结果如下:


22989-金融云区块链高级研发工程师(深圳)
技术类
1
深圳
2021-11-25


(5.3)获取所有class等于eventr标签

这里我们有两种写法,无所谓哪种更好,还是看情况来选择;

第一种:

from bs4 import BeautifulSoup

Jier = BeautifulSoup(Html, 'lxml')
Suner = Jier.find_all('tr', class_='even')  # 为什么class后面要加一个下划线呢,因为class是python自身的关键字,为了区分,bs4自带了可以
print("一共找到{}个class等于even的tr标签。".format(len(Suner)))
print(Suner)

第二种:

from bs4 import BeautifulSoup

Jier = BeautifulSoup(Html, 'lxml')
Suner = Jier.find_all('tr', attrs={'class': 'even'})
print("一共找到{}个class等于even的tr标签。".format(len(Suner)))
print(Suner)

输出结果如下(篇幅问题,只写部分信息):

一共找到5个class等于even的tr标签。
[
22989-金融云区块链高级研发工程师(深圳)
技术类
1
深圳
2021-11-25
, 
SNG16-腾讯音乐运营开发工程师(深圳)
技术类
2

(5.4)将所有id等于testclass也等于testa标签提取出来

根据5.3来看的话,它本身也有两种写法,和5.3类似,我们再试着来一遍;

第一种:

from bs4 import BeautifulSoup

Jier = BeautifulSoup(Html, 'lxml')
Suner = Jier.find_all('a', id='test', class_='test')
print(Suner)

第二种:

from bs4 import BeautifulSoup

Jier = BeautifulSoup(Html, 'lxml')
Suner = Jier.find_all('a', attrs={'id': 'test', 'class': 'test'})
print(Suner)

输出结果如下:

[SNG11-高级业务运维工程师(深圳)]

(5.5)获取所有a标签的href属性

第一种:

剩余内容请转至VX公众号 “运维家” ,回复 “175” 查看。

------ “运维家” ,回复 “175” ------
------ “运维家” ,回复 “175” ------
------ “运维家” ,回复 “175” ------

在Linux中的命令,linux实时线程,linux中tail,如何调用linux的epoll,linux无故多出很多进程,linux怎么打开xls文件,linux怎样用命令打开软件,程序员要不要装linux系统,LINUX通用链表实例;
usb无法安装linux,类似安卓linux,在linux中压缩解压命令,512老电脑linux,linux中退出根目录,linux自定义自启的脚本,linux管理员用户名是,新装的linux网卡配置,linux修改u盘权限失败,c语言linux下开发软件。

你可能感兴趣的:(python爬虫,python,爬虫,开发语言)