我是靠谱客的博主 复杂秀发,最近开发中收集的这篇文章主要介绍beautifulsoup_「python爬虫基础入门」python爬虫beautifulsoup库使用操作全解1. BeautifulSoup库简介2. BeautifulSoup库的主要解析器3. BeautifulSoup的简单使用4. BeautifuSoup的类的基本元素4.1 Tag4.2 NavigableString4.3 Comment5. 基于bs4库的HTML内容的遍历方法5.1 下行遍历5.2 上行遍历5.3 平行遍历5.4 其他遍历6. 文件树搜索6.1 name参数6,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. BeautifulSoup库简介

BeautifulSoup库在python中被美其名为“靓汤”,它和和 lxml 一样也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据。BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,若在没用安装此库的情况下, Python 会使用 Python默认的解析器lxml,lxml 解析器更加强大,速度更快,而BeautifulSoup库中的lxml解析器则是集成了单独的lxml的特点,使得功能更加强大。

d628c933-c886-413d-864b-6bae9447ef18

需要注意的是,Beautiful Soup已经自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。因此在使用它的时候不需要考虑编码方式,仅仅需要说明一下原始编码方式就可以了。

使用pip命令工具安装BeautifulSoup4库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ BeautifulSoup
# 使用清华大学镜像源安装1

2. BeautifulSoup库的主要解析器

在代码中 html.parser是一种针对于html网页页面的解析器,Beautiful Soup库还有其他的解析器,用于针对不同的网页

demo = 'https://www.baidu.com'soup = BeautifulSoup(demo,'html.parser')
12

解析器使用方法条件

4c0c6fb7a3c5487bafe4005cac8eb2c2

3. BeautifulSoup的简单使用

假如有一个简单的网页,提取百度搜索页面的一部分源代码为例


百度一下,你就知道 
12

结合requests库和使用BeautifulSoup库的html解析器,对其进行解析有如下

import requestsfrom bs4 import BeautifulSoup# 使用Requests库加载页面代码r = requests.get('https://www.baidu.com')r.raise_for_status()
# 状态码返回r.encoding = r.apparent_encodingdemo = r.text# 使用BeautifulSoup库解析代码soup = BeautifulSoup(demo,'html.parser')
# 使用html的解析器print(soup.prettify())
# prettify 方式输出页面12

4. BeautifuSoup的类的基本元素

BeautifulSoup4将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,BeautifulSoup库有针对于html的标签数的特定元素,重点有如下三种

...

1TagNavigableStringCommentBeautifulSoup

基本元素说明

044ceec5174844f79787a6b5145321aa

4.1 Tag

标签是html中的最基本的信息组织单元,使用方式如下

from bs4 import BeautifulSouphtml = 'https://www.baidu.com'bs = BeautifulSoup(html,"html.parser")print(bs.title)
# 获取title标签的所有内容print(bs.head)
# 获取head标签的所有内容print(bs.a)
# 获取第一个a标签的所有内容print(type(bs.a))# 类型1

在Tag标签中最重要的就是html页面中的name哈attrs属性,使用方式如下

print(bs.name)print(bs.head.name)# head 之外对于其他内部标签,输出的值便为标签本身的名称print(bs.a.attrs)
# 把 a 标签的所有属性打印输出了出来,得到的类型是一个字典。print(bs.a['class']) # 等价 bs.a.get('class') 也可以使用get方法,传入属性的名称,二者是等价的bs.a['class'] = "newClass"
# 对这些属性和内容进行修改print(bs.a)del bs.a['class']# 对这个属性进行删除print(bs.a)1

4.2 NavigableString

NavigableString中的string方法用于获取标签内部的文字

from bs4 import BeautifulSouphtml = 'https://www.baidu.com'bs = BeautifulSoup(html,"html.parser")print(bs.title.string)print(type(bs.title.string))1

4.3 Comment

Comment 对象是一个特殊类型的 NavigableString 对象,其输出的内容不包括注释符号,用于输出注释中的内容

from bs4 import BeautifulSouphtml = 'https://www.baidu.com'bs = BeautifulSoup(html,"html.parser")print(bs.a)# 标签中的内容print(bs.a.string) # 新闻print(type(bs.a.string)) # 1

5. 基于bs4库的HTML内容的遍历方法

在HTML中有如下特定的基本格式,也是构成HTML页面的基本组成成分

dba2fe03efa1400d8bd789fffdf72b51

而在这种基本的格式下有三种基本的遍历流程

下行遍历

上行遍历

平行遍历

三种种遍历方式分别是从当前节点出发。对之上或者之下或者平行的格式以及关系进行遍历

5.1 下行遍历

下行遍历有三种遍历的属性,分别是

0e51b24c79fd48dd8f03397ded3b5e0a
使用举例soup = BeautifulSoup(demo,'html.parser') # 循环遍历儿子节点for child in soup.body.children:print(child)# 循环遍历子孙节点
for child in soup.body.descendants:
print(child)
# 输出子节点的列表形式print(soup.head.contents)print(soup.head.contents[1])# 用列表索引来获取它的某一个元素
12

5.2 上行遍历

上行遍历有两种方式

parent
parents

2e42bcbed147473786f324ed64d523e8
使用举例soup = BeautifulSoup(demo,'html.parser') for parent in soup.a.parents:if parent is None:parent(parent)else:print(parent.name)12

5.3 平行遍历

平行遍历有四种属性

next_sibling
previous_sibling
next_siblings
previous_siblings

447f2d589f8c4a96b214592798d211ee
e31a7343d21f466fbf3b46a1c9d4d44b
1

5.4 其他遍历

31b5e6249ca44a92ad5588b136573eda

6. 文件树搜索

使用soup.find_all(name,attrs,recursive,string,**kwargs)方法,用于返回一个列表类型,存储查找的结果name:对标签名称的检索字符串attrs:对标签属性值得检索字符串,可标注属性检索recursive:是否对子孙全部检索,默认为Truestring:用于在信息文本中特定字符串的检索

6.1 name参数

如果是指定的字符串:会查找与字符串完全匹配的内容,如下

from bs4 import BeautifulSouphtml = 'https://www.baidu.com'bs = BeautifulSoup(html,"html.parser")print(bs.a)# 标签中的内容print(bs.a.string) # 新闻print(type(bs.a.string)) # 1

如果是使用正则表达式:将会使用BeautifulSoup4中的search()方法来匹配内容,如下

from bs4 import BeautifulSoupimport rehtml = 'https://www.baidu.com'bs = BeautifulSoup(html,"html.parser")t_list = bs.find_all(re.compile("a"))for item in t_list: print(item)# 输出列表12

如果传入一个列表:BeautifulSoup4将会与列表中的任一元素匹配到的节点返回,如下

t_list = bs.find_all(["meta","link"])for item in t_list:print(item)12

如果传入一个函数或者方法:将会根据函数或者方法来匹配

from bs4 import BeautifulSouphtml = 'https://www.baidu.com'bs = BeautifulSoup(html,"html.parser")def name_is_exists(tag):
return tag.has_attr("name")t_list = bs.find_all(name_is_exists)for item in t_list:
print(item)1

6.2 attrs参数

并不是所有的属性都可以使用上面这种方式进行搜索,比如HTML的data属性,用于指定属性搜索

t_list = bs.find_all(data-foo="value")1

6.3 string参数

通过通过string参数可以搜索文档中的字符串内容,与name参数的可选值一样,string参数接受字符串,正则表达式,列表

from bs4 import BeautifulSoupimport rehtml = 'https://www.baidu.com'bs = BeautifulSoup(html, "html.parser")t_list = bs.find_all(attrs={"data-foo": "value"})for item in t_list:
print(item)t_list = bs.find_all(text="hao123")for item in t_list:
print(item)t_list = bs.find_all(text=["hao123", "地图", "贴吧"])for item in t_list:
print(item)t_list = bs.find_all(text=re.compile("d"))for item in t_list:
print(item)123

使用find_all()方法的时,常用到正则表达式的形式import re如下所示

soup.find_all(sring = re.compile('pyhton'))# 指定查找内容# 或者指定使用正则表达式要搜索的内容sring = re.compile('pyhton')# 字符为pythonsoup.find_all(string)# 调用方法模板1

6.4 常用的fiid()方法如下

1eca1ffc8eef4b83a9f01a4f2e11bae1

最后

小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取

最后

以上就是复杂秀发为你收集整理的beautifulsoup_「python爬虫基础入门」python爬虫beautifulsoup库使用操作全解1. BeautifulSoup库简介2. BeautifulSoup库的主要解析器3. BeautifulSoup的简单使用4. BeautifuSoup的类的基本元素4.1 Tag4.2 NavigableString4.3 Comment5. 基于bs4库的HTML内容的遍历方法5.1 下行遍历5.2 上行遍历5.3 平行遍历5.4 其他遍历6. 文件树搜索6.1 name参数6的全部内容,希望文章能够帮你解决beautifulsoup_「python爬虫基础入门」python爬虫beautifulsoup库使用操作全解1. BeautifulSoup库简介2. BeautifulSoup库的主要解析器3. BeautifulSoup的简单使用4. BeautifuSoup的类的基本元素4.1 Tag4.2 NavigableString4.3 Comment5. 基于bs4库的HTML内容的遍历方法5.1 下行遍历5.2 上行遍历5.3 平行遍历5.4 其他遍历6. 文件树搜索6.1 name参数6所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部