文章目录
-
- 写在前面
- 一、Beautiful Soup库入门
-
- 1.Beautifu Soup的安装
- 2.Beautifu Soup的基本元素
- 3.基于bs4库的HTML内容遍历方法
- 4.基于bs4库的HTML格式化和编码
- 二、信息组织与提取方法
-
- 1.信息标记的三种形式
- 2.三种信息标记形式的比较
- 3.信息提取的一般方法
- 4.基于bs4库的HTML内容查找方法
- 三、实例:中国大学排名定向爬虫
- 引用源自
- 写在最后
写在前面
因为最近在中国大学MOOC网上学习嵩天老师(北京理工大学)的爬虫课程,所以为了方便自己以后编程时查找相关函数和方法,也为了方便各位小伙伴们学习,整理这篇关于爬虫中BeautifulSoup库的基本知识点。本篇涉及图的地方,我会截取课程内容的截图(因为我实在是懒得画图了),涉及表的地方我会重新制作,一是为了美观,二是为了加深印象,因为函数和方法太多不常用的话就会遗网。好了。话不多说,开干!
一、Beautiful Soup库入门
1.Beautifu Soup的安装
工欲善其事必先利其器,学习bs4库的第一步是安装他,很简单,首先我们win+R,输入cmd进入命令行,输入如下代码
pip install beautifulsoup4
敲下回车,只需等待片刻即可安装成功~
Beautiful Soup库的使用如下:
2.Beautifu Soup的基本元素
(1) Beautiful Soup库的理解
(2)Beautiful Soup类
Beautiful Soup类对应一个HTML/XML文档的全部内容
(3)Beautiful Soup库解析器
解析器 | 使用方法 | 条件 |
---|---|---|
bs4的HTML解析器 | BeautifulSoup(mk,‘html.parser’) | 安装bs4库 |
lxml的HTML解析器 | BeautifulSoup(mk,‘lxml’) | pip install lxml |
lxml的XML解析器 | BeautifulSoup(mk,‘xml’) | pip install lxml |
html5lib的解析器 | BeautifulSoup(mk,‘html5lib’) | pip install html5lib |
(4)Beautiful Soup库的基本元素
基本元素 | 说明 |
---|---|
Tag | 标签,最基本的信息组织单元,分别用<>和</>表明开头和结尾 |
Name | 标签的名字,的名字是’p’,格式:.name |
Attributes | 标签的属性,字典的组织形式,格式:.attrs |
NavigableString | 标签内非属性字符串,<>…</>中的字符串,格式:.string |
Comment | 标签内字符串的注释部分,一种特殊的Comment类型 |
3.基于bs4库的HTML内容遍历方法
(1)HTML基本格式
(2)标签树的下行遍历
属性 | 说明 |
---|---|
.contents | 子节点列表,将所有儿子节点存入列表 |
.children | 子节点的迭代类型,与.contents类似,用于循环遍历儿子节点 |
.descendants | 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历 |
注:.contents返回的是列表类型,后两个返回的是迭代类型
(3)标签树的上行遍历
属性 | 说明 |
---|---|
.parent | 节点的父亲标签 |
.parents | 节点先辈标签的迭代类型,用于循环 遍历先辈节点 |
(4)标签树的平行遍历
属性 | 说明 |
---|---|
.next_sibling | 返回按照HTML文本顺序的下一个平行节点标签 |
.previous_sibling | 返回按照HTML文本顺序的上一个平行节点标签 |
.next _siblings | 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签 |
.previous_siblings | 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签 |
注:后两个是迭代类型
4.基于bs4库的HTML格式化和编码
(1)格式化
prettify():为html格式的内容和文本增加换行符,也可以对每一个标签做相关的处理。
(2)编码
bs4库将任何读入的html文件或字符串都转换成"UTF-8"编码
二、信息组织与提取方法
1.信息标记的三种形式
信息的标记
(1)XML
(2)JSON
键值对之间可以嵌套使用:
(3)YAML
可以用缩进的形式表示所属关系:
用-(减号)表达并列关系:
|(竖线)表示整块数据 #表示注释
2.三种信息标记形式的比较
名称 | 优缺点 | 作用 |
---|---|---|
XML | 最早的通用信息标记语言,可扩展性好,但是繁琐 | Internet上的信息交互与传递 |
JSON | 信息有类型,适合程序处理,较XML简洁 | 移动应用云端和节点的信息通信,无注释 |
YAML | 信息无类型,文本信息比例最高,可读性好 | 各类系统配置文件有注释易读 |
3.信息提取的一般方法
(1)完整解析信息的标记形式,再提取关键信息。XML,JSON,YAML
需要标记解析器,如bs4库的标签树遍历,优点是信息解析准确,缺点是提取过程繁琐
(2)无视标记信息,直接搜索关键信息。搜索
使用对信息的文本查找函数即可。优点是提取过程简洁,速度快,缺点是提取信息的准确性与信息内容直接相关。
(3)融合方法:完整形式解析+搜索,提取关键信息,需要标记解析器及文本查找函数。
4.基于bs4库的HTML内容查找方法
(1)提取HTML所有URL链接
思路:搜索到所有a标签,解析a标签格式,提取href后的链接内容
url = "http://python123.io/ws/demo.html"
r = requests.get(url)
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
for link in soup.find_all('a'):
print(link.get('href'))
--------------out---------------
http://www.icourse163.org/course/BIT-268001
http://www.icourse163.org/course/BIT-1001870001
(2)bs4库中HTML内容的查找方法:
<>.find_all(self, name=None, attrs={ }, recursive=True, text=None, limit=None, **kwargs)
#返回一个列表类型,存储查找的结果
name:对标签名称的检索字符串
attrs:对标签属性值的检索字符串,可标注属性检索
recursive:是否对子孙全部搜索,默认为True
string: <>...</>中字符串区域的检索字符串
soup.find_all('a')
soup.find_all(['a','b'])
soup.find_all(True) #返回所有标签
soup.find_all('p', 'course') #所有属性是course的p标签
soup.find_all(id='link1') #查找包含属性id='link1'的标签
简写形式:
<tag>(..) 等价于 <tag>.find_all(..)
三、实例:中国大学排名定向爬虫
这个实例我在博客中有写过完整的解析,感兴趣的小伙伴可以点过去看一下,传送门送给大家。
链接: https://blog.csdn.net/weixin_44578172/article/details/109340255
引用源自
中国大学MOOC Python网络爬虫与信息提取
https://www.icourse163.org/course/BIT-1001870001
CSDN博客:
https://blog.csdn.net/songhui1024/article/details/84575575
写在最后
本篇属于整理总结类型文章,如果对你有帮助的话,欢迎收藏喔~
ps:一键三连更好啦~