IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python -- Beautifulsoup4库的使用 -> 正文阅读

[Python知识库]Python -- Beautifulsoup4库的使用

Beautifulsoup4库的使用

??要点:beautifulsoup4库是一个解析和处理HTML和XML的第三方库。

1.beautifulsoup4库概述

??使用requests库获取HTML页面并将其转换成字符串后,需要进一步解析HTML页面格式,提取有用信息,这需要处理HTML和XML的函数库。

??beautifulsoup4库,也称为Beautiful Soup库或bs4库,用于解析和处理HTML和XML。需要注意的是,它不是BeautifulSoup库。它的最大优点是能根据HTML和XML语法建立解析树,进而高效解析其中的内容。

??HTML建立的Web页面一般非常复杂,除了有用的内容信息外,还包括大量用于页面格式的元素,直接解析一个Web网页需要深入了解HTML语法,而且比较复杂。beautifulsoup4库将专业的Web页面格式解析部分封装成函数,提供了若干有用且便捷的处理函数。

??在使用beautifulsoup4库之前,需要进行引用,由于这个库的名字非常特殊且采用面向对象方式组织,可以用from-import方式从库中直接引用BeautifulSoup类,方法如下:

>>>from bs4 import BeautifulSoup

2.beautifulsoup4库解析

??beautifulsoup4库中最主要的是BeautifulSoup类,每个实例化的对象相当于一个页面。采用from-import导入库中的Beautifulsoup类后,使用BeautifulSoup()创建一个BeautifulSoup对象。

>>>import requests
>>>from bs4 import BeautifulSoup
>>>r = requests.get("http://www.baidu.com")
>>>r.encoding = "utf-8"
#为了简化代码,没有考虑异常情况
>>>soup = BeautifulSoup (r.text)
#soup就是一个BeautifulSoup对象
>>>type(soup)
<class 'bs4.BeautifulSoup'>

??创建的BeautifulSoup对象是一个树形结构,它包含HTML页面中的每一个Tag(标签)元素,如head、body等。

??BeautifulSoup对象的常用属性(共6个)

属性描述
headHTML页面的head内容
titleHTML页面标题,在head之中,由title标记
bodyHTML页面的body内容
PHTML页面中第一个p内容
stringsHTML页面所有呈现在Web上的字符串,即标签的内容
stripped_stringsHTML页面所有呈现在Web上的非空格字符串
>>>soup.head 
>>>title=soup.title
<title>百度一下,你就知道</title>
>>>type(title) #每个对应HTMLTag的属性是一个Tag类型
<class 'bs4.element.Tag'>
>>>soup.p

??BeautifulSoup属性与HTML的标签名称相同,每一个Tag标签beautifulsoup4库中也是一个对象,称为Tag对象。其中,尖括号(<>)中标签的名字是name,尖括号内其他项是attrs,尖括号之间的内容是string。因此,可以通过 Tag对象的name、attrs和string属性获得相应内容。
??标签对象的常用属性(共4个)

属性描述
name字符串,标签的名字,比如div
attrs字典,包含了原来页面Tag所有的属性,比如href
contents列表,这个Tag下所有子Tag的内容
string字符串,Tag所包围的文本,网页中真实的文字
>>>soup.a # 只返回第一个
<a class="mnav"href="http://www.nuomi.com">糯米</a>
>>>soup.a.name
'a'
>>>soup.a.attrs
{'href':'http://www.nuomi.com','class':['mnav']}
>>>soup.a.string
,糯米’
>>>title.name #title变量在上段例子中已经定义
'title'
>>>title.string
,百度一下,你就知道
>>>soup.p.contents  这个Tag下所有子Tag的内容

??由于HTML语法可以在标签中嵌套其他标签,所以,string属性的返回值遵循如下原则。

??(1)如果标签内部没有其他标签,string属性返回其中的内容。

??(2)如果标签内部还有其他标签,但只有一个标签,string属性返回最里面标签的内容。

??(3)如果标签内部有超过1层嵌套的标签,string属性返回None(空字符串)。

??HTML语法中同一个标签会有很多内容。

??当需要列出标签对应的所有内容或者需要找到非第一个标签时,需要用到BeautifulSoup的find()和find_all()方法。这两个方法会遍历整个HTML文档,按照条件返回标签内容。

BeautifulSoup.find_all(name, attrs, recursive, string, limit)

??作用:根据参数找到对应标签,返回列表类型。

??参数如下:

????name:按照Tag标签名字检索,名字用字符串形式表示,例如div、li。

????attrs:按照Tag标签属性值检索,需要列出属性名称和值,采用JSON表示。

????recursive:设置查找层次,只查找当前标签下一层时使用recursive=False。

????string:按照关键字检索string属性内容,采用string=开始。

????limit:返回结果的个数,默认返回全部结果。

>>>a = soup.find all('a')   #查找所有的<a>

>>> len (a)
13
>>>soup.find_all('script')
>
>>>soup.find_all('script'{'src':'http://www.zgxiangxin.com/\jquery/jquery-1.9.4.min.js'}#筛选,只查找src=字符和串的标签

>>>import re    #使用正则表达式库,可以用这个库实现字符串片段匹配
>
>>>soup.find_all('script',{'src':re.compile('jquery')})
>
>>>soup.find_all(string=re.compile('百度'))

??BeautifulSoup的find_all()方法可以根据标签名字、标签属性和内容检索并返回标签列表,通过片段字符串检索时需要使用正则表达式re函数库,re是Python 标准库,直接通过 import re 即可使用。采用 re.compile(‘jquery’)实现对片段字符串(如’jquery’)的检索。当对标签属性检索时,属性和对应的值采用JSON格式,例如:

'src':re.compile('jquery')

??其中,键值对中值的部分可以是字符串或者正则表达式。

拓展:正则表达式

??正则表达式是字符串的一种逻辑表达,一般在计算机编译器中使用。Python语言采用正则表达式辅助字符串查找。正则表达式是一种规则,只要字符串符合这个规则,就算作匹配。例如,通过re.compile()函数注册一个正则表达式jquery’,则所有包含该表达式的字符串都与它匹配,除了字符串,正则表达式还可以通过*+{}目等符号扩展功能。

??除了find_all()方法,BeautifulSoup类还提供一个find()方法,官们的区别只是前者返回全部结果而后者返回找到的第一个结果,find_all())函数由于可能返回更多结果,所以采用列表形式;find()函数返回字符串形式。

BeautifulSoup.find(name,attrs,recursive,string)

??作用:根据参数找到对应标签,K用字符串返回找到的第一个值。

??参数:与find_all()方法一样。

??处理网页需要对HTML有一定的理解,而实现爬虫并不算复杂,BeautifulSoup4 库是一个非常完备且活跃的HTML解析函数库,它还可以完成更多复杂操作。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:24:12  更:2022-04-24 09:25:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 10:45:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计