BeautifulSoup 是 Python 用来解析爬取的网页源代码的一个库,因其码的简洁性,因此应用得比较多。对于解析高度结构化的HTML,相比于正则表达式,用 BeautifulSoup 能更 快速便捷 地进行解析和提取。

BeautifulSoup 安装和导入

安装BeautifulSoup库,如果是在pycharm中的话就用file->settings->project->project interpreter,然后点击左下角的加号搜索 BeautifulSoup4,点击安装库即可。

或者是在python安装目录下的 Scripts,在地址栏输入 cmd 或者是 shift 加右键打开 powershell,拖动 pip.exe 到窗口中,再加上 install beautifulsoup4,回车即可。(也不一定要在这个目录下面运行,不过得配置好环境变量,环境变量其实就是在电脑的任意位置,如果命令不在当前目录下能运行,就会自动搜索环境变量中的地址)

这里是已经安装好的

导入库的代码也有要注意的地方,就是导入的库包,用的是 eautifulsoup4 的缩写。

from bs4 import BeautifulSoup

beautifulsoup解析和提取源代码的常用方法

我们以如下的源代码为例进行介绍。

res = '''
<html>
<body>
<h1 class = 'title'> 我是一级标题 </h1>
<h1 class = 'small_title'> 我是一级小标题 </h1>
<p> 文本内容 </p>
<a href = '我是网址'> 网址名称 </a>
</body>
</html>'''

1.获取特定标签的内容

首先导入 beautifulsoup 方法,然后设置 html.parser HTML解析器。接着用解析器对象的 select 方法选取标签名为输入的参数的内容(注意:最后获取的结果是个列表)。

from bs4 import BeautifulSoup

soup = BeautifulSoup(res,'html.parser')
title = soup.select('h1')
print(title)

输出结果为:[<h1 class="title"> 我是一级标题 </h1>, <h1 class="small_title"> 我是一级小标题 </h1>]

想要获取这些结果中,除了头尾标签的中间的文本内容,可以把列表中的元素拿出来然后加上 .text 即可。

2.获取特定clss属性的内容

如果要获取特定class属性的内容,就需要把解析器对象传入的参数写为:'.class参数值',如下,我们要提取网页代码中的class属性为 title 的内容。

from bs4 import BeautifulSoup

soup = BeautifulSoup(res,'html.parser')
title = soup.select('.title')
print(title)

代码会把所有的class属性值为传入参数的内容都找出来,所以这个方法得结合前面找特定标签内容的方法结合起来,就能具体到某一类内容下,的某一属性值对应的方法。

特别的,id 属性的查找用 # 来声明,如下,找到id属性为 title 的内容:

data = soup.select('#title')

3.获取内容中的网址

前面说了获取含标签的内容,以及如何提取内容中不含标签的部分,而实际中有些信息是在标签里面的,比如,链接信息,那我们怎么去除文本内容只保留标签内容中的网址呢?用的是 返回内容['href'],就是在返回的内容后加上 [href] 索引。

from bs4 import BeautifulSoup

soup = BeautifulSoup(res,'html.parser')
title = soup.select('a')
print(title[0]['href'])

注意:解析器返回的对象是一个列表,列表里面的对象才具有 "href" 这个参数,所以需要先把元素从列表中取出来。

4.多层次筛选

实际的代码常常是比较复杂的,需要的筛选条件也是多层次多条件的,有人会说,那就一层层把内容提取出来然后再筛选呗,其实 beautifulsoup 可以直接解析多层次的条件。

如:我要筛选属性值为 title 的区块代码下的 h1 标签的部分,可以写为:data = soup.select('.title h1')

只要在多个条件之间用空格隔开就好。同理,上面三个常用的解析函数可以灵活配合使用。

熟练掌握以上的技巧,就相当于是成功进入beautifulsoup的世界啦,希望对你有帮助。

举报/反馈

Lins号丹

3981获赞 2588粉丝
喜欢爬山的运筹算法工程狮,CSDN同号,欢迎关注~
科技领域创作者
关注
0
0
收藏
分享