2

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

 1 year ago
source link: https://blog.51cto.com/u_12386780/5343165
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

1、BeautifulSoup4是干啥的

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

​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、解析工具对比

Beautifulsoup

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

4、BeautifulSoup上手

from bs4 import BeautifulSoup

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

Jier = BeautifulSoup(html, 'lxml')
print(Jier.prettify())

输出结果如下:

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

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

5、从示例来了解

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

(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)

输出结果如下:

(5.3)获取所有​​class​​​等于​​even​​​的​​tr​​标签

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

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​​​等于​​test​​​,​​class​​​也等于​​test​​​的​​a​​标签提取出来

根据​​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)

输出结果如下:

(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下开发软件。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK