爬虫笔记(二)——Beautiful Soup库

   日期:2020-11-06     浏览:92    评论:0    
核心提示:本文超详细整理了爬虫当中Beautiful Soup库的各种知识点,满满的干货,非常适合收藏起来复习用哦~,希望能够对你有所帮助。

文章目录

    • 写在前面
    • 一、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:一键三连更好啦~

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服