BeautifulSoup在Python中是一个比较受欢迎的第三方库,它是一款比较优秀的网页解析库,里面提供了很多接口帮助我们来处理导航、搜索、修改分析树,它的查找提取功能非常好用,能够节省程序员大量的时间。
BeautifulSoup最新版为BeautifulSoup4,我们可以通过pip来安装,也可以在Pycharm中直接找到进行下载。
Pip安装过程如图:
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())
输出结果为:
我们可以通过这种方式来解析网页,我们还可以通过它来进一步获取更精确的信息,例如:
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来输出内容。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程