BeautifulSoup在Python中是一个比较受欢迎的第三方库,它是一款比较优秀的网页解析库,里面提供了很多接口帮助我们来处理导航、搜索、修改分析树,它的查找提取功能非常好用,能够节省程序员大量的时间。

        BeautifulSoup最新版为BeautifulSoup4,我们可以通过pip来安装,也可以在Pycharm中直接找到进行下载。

python爬虫12 

        Pip安装过程如图:

 python爬虫13

1. BeautifulSoup的使用

        我们先通过一段代码来测试使用一下它的用法:

Dot = """
<html><head><title>dotcpp</title></head>
<body>
<p><b>c语言网</b></p>
<p>编程网站
<a href="https://www.dotcpp.com/" id="link1">home</a>,
<a href="https://blog.dotcpp.com/" id="link2">blog</a>
<a href="https://www.dotcpp.com/oj/problemset.html" id="link3">oj</a></p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(dot, "html.parser")
print(soup.prettify())

        输出结果为:

 python爬虫14

        我们可以通过这种方式来解析网页,我们还可以通过它来进一步获取更精确的信息,例如:

soup = BeautifulSoup(html,"html.parser") 
print(suop.prettify())
print(suop.title)  # 获取title标签的所有内容
print(suop.title.name) # 获取title标签的名字
print(suop.title.string) # 获取title标签的文本内容
print(suop.head) # 获取head标签的所有内容
print(suop.div)# 获取第一个div标签中的所有内容
print(suop.div["id"]) # 获取第一个div标签的id的值
print(suop.a)  # 获取第一个a标签中的所有内容
print(suop.find_all("a")) # 获取所有的a标签,并遍历打印a标签中的href的值
print(suop.find(id = "dot")) # 获取id="dot"

        输出结果即为对应的信息,注意解析html网页的解析方式,我们一直采用了Python中自带的html.parser,我们还可以选择lxml HTML、lxml XML和html5lib等解析器,他们分别有着优劣点,如果系统中有C语言库的可以选择下载前两者解析器,如果不想再下载过多插件的也可以直接选择我们上面用到的即可,我们在使用BeautifulSoup的时候一定要注意的就是网页解析,正确的解析方式十分重要。

2. BeautifulSoup4的四个对象

        Beautiful Suop把网页中的信息转换成一个复杂的树形结构,通过子树分解为四个对象,分别是Tag、NavigableSting、BeautifulSoup、Comment。

        1) Tag

        Tag与它的对应的汉语一个意思,对应的就是HTML中的标签,像我们在上面使用到的:

print(suop.title) # 获取title标签的名称
print(suop.a) # 获取所有的a标签中的所有内容

        他们都属于标签信息,我们可以通过标签名来获取到这些标签中的内容,有一点需要注意的是在查找的时候,对应的是符合要求的第一个标签,Tag有两个属性,分别是name和attrs,name也就是标签的名字,attrs对应class、id等信息。

        2) NavigableSting

        NavigableSting对应的是标签内部的文字,例如:

print(suop.title.string) # 获取标签的所有内容

        通过这种方式就可以直接获取到标签内部的文字。

        3) BeautifulSoup

        BeautifulSoup对象对应的是文档中的内容,它类似于一个特殊的标签,我们可以获取到它的类型、名称和属性,也就是上面我们所使用到的:

soup = BeautifulSoup(html,"html.parser")

        4) Comment

        Comment对象是一个特殊的NavigableSting对象,它输出的内容没有注释符号,如果不加以处理会影响我们对文档的解析,因为这种方式会忽略掉文档的注释,

        因此注释中的内容会以代码格式被解析出来,进而影响我们的后续操作,所有我们 一般会采用.string来输出内容。


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)