python beautifulsoup库_Python爬虫系列:BeautifulSoup库详解

  • Post author:
  • Post category:python


f8f40eb65c163ab7d3f277a20094f9ea.png

点击上方蓝字关注”程序员Bob”呀~

b04b8d3746acb1c2c70cf37cc4351b17.png

每个人的生命都是通向自我的征途,是对一条道路的尝试,是一条小径的悄然召唤。人们从来都无法以绝对的自我之相存在,每一个人都在努力变成绝对自我,有人迟钝,有人更洞明,但无一不是自己的方式。人人都背负着诞生之时的残余,背负着来自原初世界的黏液和蛋壳,直到生命的终点。

-《德米安 彷徨少年时》

ee96dd079e147a47c2bc53b44416a7b3.png

之前了解过Requests库的用法,在Python爬虫中,用到

BeautifulSoup4

库的技术路线为Requests库+BeautifulSoup4库+re库,这里小编准备先聊聊Beautiful Soup4库。

至于为什么这个库要叫BeautifulSoup库(中文翻译为美丽的汤

32693726350aa38f6ef38702a74975e3.png
),实在是令人百思不得其解,虽然小编知道它是由一个美丽的童话故事而来,但小编就是不说

01e5db39b40b3efa5413bc14d7276fe3.png
。去官网就知道啦~(如下)

https://www.crummy.com/software/BeautifulSoup/

1.BeautifulSoup4库的功能

在官网对

BeautifulSoup4的简单介绍为:

Beautiful Soup提供了一些用于导航,搜索和修改解析树的简单方法和Pythonic习惯用法:用于剖析文档并提取所需内容的工具箱。编写应用程序不需要很多代码。

Beautiful Soup会自动将传入文档转换为Unicode,将传出文档转换为UTF-8。您不必考虑编码,除非文档未指定编码并且Beautiful Soup无法检测到编码。然后,您只需要指定原始编码即可。

Beautiful Soup位于流行的Python解析器(如lxml和html5lib)的顶部,使您可以尝试不同的解析策略或提高灵活性。

至于为什么后面有个4(代表版本号),因为BeautifulSoup3项目已停止开发,BeautifulSoup4也已被纳入到bs4里面了,所以在引用该库时需要使用:

from bs4 import BeautifulSoup

2.Beautiful Soup4库的安装

打开cmd命令行窗口,输入:pip install beautifulsoup4

编写一个小小的项目检查BeautifulSoup库是否安装成功:

import requestsfrom bs4 import BeautifulSoupr=requests.get(“https://python123.io/ws/demo.html”)print(r.text)demo=r.textsoup=BeautifulSoup(demo,”html.parser”)print(soup.prettify())

输出如下(截取部分):

7841d56f637e92539475e78884a8ad27.png

能正确输出即安装成功。

3.BeautifulSoup库的简单使用

有兴趣的小伙伴可以先试试运行下面的这段代码(建议输出语句逐条运行):

import requestsfrom bs4 import BeautifulSoupr=requests.get(“https://python123.io/ws/demo.html”)#print(r.text)demo=r.textsoup=BeautifulSoup(demo,”html.parser”)print(soup.prettify())print(soup.title)tag=soup.aprint(tag)print(soup.a.name)print(soup.a.parent.name)print(soup.a.parent.parent.name)print(tag.attrs)print(tag.attrs[‘class’])print(tag.attrs[‘href’])print(type(tag.attrs))print(type(tag))print(soup.a.string)print(soup.p.string)print(type(soup.p.string))

大家可以根据输出内容来判断其作用,实际上挺容易的。

首先是库的引用:

beautiful Soup 库:也叫beautifulsoup4或bs4

引用格式:from bs4 import BeautifulSoup#切记B和S要大写 ,

也可以直接用import bs4

引用之后的下面这条语句:

soup=BeautifulSoup(demo,”html.parser”)

其中,

html.parser

是一个html的解释器(解析前面demo里面的内容)。

那么什么是解释器呢?

百度:解释器,又译为直译器,是一种电脑程序,能够把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转译出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。

大概意思和编译器差不多,相关知识请自行百度。

关于BeautifulSoup库相关的解释器:

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

其它语句就要知道BeautifulSoup类的基本元素:

Tag:标签,最基本的信息组织单元,分别用<>和>标明开头和结尾。

Name:标签的名字,

..

的名字是’p’,格式:.name。

Attributes:标签的属性,字典形式组织 格式::.attrs。

Navigable String:标签的非属性字符串,<>…>中字符串,格式:.string。

Comment:标签内字符串的注释部分,一种特殊的comment类型。

4.标签树的遍历:

标签树的下行遍历

相关属性及其说明(下同):

.content  子节点的列表,将所有儿子节点存入列表

.children   子节点的迭代类型,与.content类似,用于循环儿子结点

.descendants  子孙节点的迭代类型,包含所有子孙结点,用于循环遍历

实例:

import requestsfrom bs4 import BeautifulSoupr=requests.get(“https://python123.io/ws/demo.html”)#print(r.text)demo=r.textsoup=BeautifulSoup(demo,”html.parser”)print(soup.head)print(soup.head.contents)print(soup.body.contents)print(len(soup.body.contents))print(soup.body.contents[1])

标签树的下行遍历:

for child in soup.body.children:print(child)

标签树的上行遍历:

.parent :节点的父亲标签

.parents 节点先辈标签的迭代类型,用于循环遍历先辈节点

实例:

import requestsfrom bs4 import BeautifulSoupr=requests.get(“https://python123.io/ws/demo.html”)demo=r.textsoup=BeautifulSoup(demo,”html.parser”)for parent in soup.a.parents:if parent is None:print(parent)else:print(parent.name)

标签树的平行遍历:

.next.sibling 返回HTML文本顺序的下一个平行节点标签

.previous_sibling 返回按照HTML文本顺序的上一个平行节点

.next_siblings 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签

.previous_siblings 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签

实例:

import requestsfrom bs4 import BeautifulSoupr=requests.get(“https://python123.io/ws/demo.html”)#print(r.text)demo=r.textsoup=BeautifulSoup(demo,”html.parser”)print(soup.a.next_sibling)#下一个标签print(soup.a.next_sibling.next_sibling)print(soup.a.previous_sibling)print(soup.a.previous_sibling.previous_sibling)print(soup.a.parent)#遍历后续节点for sibling in soup.a.next_siblings:print(sibling)#遍历前续节点for sibling in soup.a.previous_siblings:print(sibling)

To:bs4将任何读入的HTML文件或字符串都转换成utf-8编码。

Python爬虫系列,未完待续…

85d8db58ad4bf4d8b743c07d79972905.png

为你,千千万万遍.

往期推荐:

一键三连,就差你了

5cecdd641a4dd2816555423d25d65030.png



版权声明:本文为weixin_36318548原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。