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个)
属性 | 描述 |
---|---|
head | HTML页面的head内容 |
title | HTML页面标题,在head之中,由title标记 |
body | HTML页面的body内容 |
P | HTML页面中第一个p内容 |
strings | HTML页面所有呈现在Web上的字符串,即标签的内容 |
stripped_strings | HTML页面所有呈现在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 -- Beautifulsoup4库的使用相关推荐
- 【Python爬虫】BeautifulSoup4 库的一些用法
Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航(navigating),搜索 ...
- Python爬虫||BeautifulSoup4库-以小猪短租为例
由于上次的文章被同学吐槽了,正则表达式过于麻烦,那就用BeautifulSoup库吧,比正则表达式简单太多了!只需要简单的几条语句,即可完成网页中某个元素的提取.他是python的一个HTML或者XM ...
- zlib 离线安装_黑板派Python扩展库安装与常见问题解决完整指南
点击蓝字 ! 关注我们 "Python小屋"编程比赛正式开始 推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国, ...
- 以下用于数据存储领域的python第三方库是-Python 二级选择题
88.下面代码的输出结果是 ( A ) print(round(0.1 + 0.2,1) == 0.3) A: True B: 0 C: 1 D: False 解释: round 是一个四舍五入的函数 ...
- Python第三方库的安装,升级以及版本查看
方法:通过电脑的cmd命令行来进行python第三方库的安装,升级以及版本查看 安装和升级pip 安装pip方法1 在cmd命令行输入以下命令: python -m ensurepip #当提示不存在 ...
- Python第三方库的安装及路径查看总结
文章目录 1.python第三方库的四种安装方法 2.更换安装的第三方库的镜像源 3.如何查看查看python安装路径以及pip安装的包列表及路径 3.1.Linux环境下查看Python路径 3.2 ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...
- Python实训day04am【爬虫介绍、爬取网页测试、Python第三方库】
Python实训-15天-博客汇总表 目录 1.文本文件编程题 2.爬虫(Scrapy) 2.1.安装第三方库 2.2.爬取网页测试 2.2.1.样例1 2.2.2.样例2 3.PyCharm导入第三 ...
- 自动安装第三方库python,python第三方库自动安装脚本
#python第三方库自动安装脚本,需要在cmd中运行此脚本 #BatchInstall.py import os libs = {"numpy","matplotlib ...
最新文章
- 英国工会联盟报告:机器人技术和AI让三分之一的人失业
- 聊一聊社交网络的逻辑、产品和未来
- OpenGL 库 简介
- 一段良好的程序永远不应该发生panic异常
- 93%程序员都做过的事:来写一个python式的hello world吧
- 利用OpenCV实现人脸检测
- 蓝桥杯 ADV-207 算法提高 最长字符序列
- 基于图像的小麦真菌病害深度学习识别(数据+平台)
- Django 模板中使用 Ajax POST
- android adb.exe端口占用
- Windows server 2008 搭建×××服务
- 通过kmeans分析出租车数据并调用百度API进行可视化!
- 华为推出首款折叠屏5G手机;微信“上车”时间已定;社区团购暗潮涌动
- windows注册表启动项
- ndows movie maker,Windows Movie Maker
- MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略
- 有个大神级女朋友是什么体验
- 迭代学习控制方式Simulink建模与仿真
- scau 10306 Prison break
- hadoop 四种压缩格式