Beautiful Soup 4.2.0 doc_tag、Name、Attributes、多值属性
找到了bs4的中文文档,对昨天爬虫程序里所涉及的bs4库进行学习。这篇代码涉及到tag、Name、Attributes以及多值属性。
'''
对象的种类
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象。
所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment 。
''' from bs4 import BeautifulSoup soup = BeautifulSoup('<b class="boldest">Extremely bold</b>','lxml')
tag = soup.b
type(tag)
#<class 'bs4.element.Tag'> #TAG.NAME
tag
#<b class="boldest">Extremely bold</b>
tag.name
#'b'
tag.name = 'blockquote'
tag
#<blockquote class="boldest">Extremely bold</blockquote>
'''
即tag首的'<'后和tag尾'</>'内,就是这个tag的名称.
如果改变了tag的name,那将影响所有通过当前Beautiful Soup对象生成的HTML文档
'''
tag.name = 'b' #Attributes
'''一个tag可以有多个属性。如tag <b class="boldest">,他有一个"class"属性,值为"boldest"。'''
#tag属性的操作方法与字典相同。
tag['class']
# u'boldest'
tag.attrs #“点”取属性
# {u'class':u'boldest'}
'''
tag的属性可以被添加、删除或修改。tag的属性操作方法与字典一样。
'''
tag['class'] = 'verybold' #属性查看
tag['id'] = 1 #属性查看
tag
# <blockquote class="verybold" id="1">Extremely bold</blockquote> del tag['class'] #属性删除
del tag['id'] #属性删除
tag
# <blockquote>Extremely bold</blockquote> tag['class'] #删除属性后查看,报错
# KeyError: 'class'
print(tag.get('class'))
# None #多值属性
'''
最常见的多值属性是class,还有一些多值属性如 rel, rev, accept-charset, headers,accesskey等。
多值属性在 BeautifulSoup 中的返回类型是list:
'''
css_soup = BeautifulSoup('<p class="body strikeout"></p>') #这里虽然body和strikeout只用了一个空格隔开,但其仍然会被隔开返回。(大概因为在HTML的语法里这就代表了两个属性)
css_soup.p['class']
# ["body", "skrikeout"] css_soup = BeautifulSoup('<p class="body"></p>')
css_soup.p['class']
# ["body"] #这里虽然class的属性只有一个值,但是因为class本身是一个多值属性,故返回了list
'''
(接上一行注释)而如果某个属性看上去有多个值,但在任何版本的HTML定义中都没有被定义为多值属性,
那么BeautifulSoup会将这个属性作为字符串返回。如下↓
'''
id_soup = Beautiful('<p id="my id"></p>')
id_soup.p['id']
# 'my id'
'''
将tag转换为字符串时,多值属性会合并为一个值
'''
rel_soup = BeautifulSoup('<p>Back to the <a rel="index">homepage</a></p>')
rel_soup.a['rel']
# ['index']
rel_soup.a['rel'] = ['index','contents']#给a标签的rel属性添加值,转化在html里就是空格连接
print(rel_soup.p)
# <p>Back to the <a rel="index contents">homepage</a></p>
'''
如果转换的文档是XML格式,那么tag中不包含多值属性
'''
xml_soup = BrautifulSoup('<p class="body strikeout"></p>','xml')#lxml有多值属性,xml没有
xml_soup.p['class'] #xml里的class属性值输出出来仍然是(如非多值属性的)字符串形式,而非列表
# u'body strikeout' #可以遍历的字符串
'''
字符串常被包含在tag内,BeautifulSoup用 NavigableString 类来包装tag中的字符串:
'''
tag.string
# u'Extremely bold'
type(tag.string)
# <class 'bs4.element.NavigableString'>
'''
一个 NavigableString 字符串与Python中的Unicode字符串相同,
并且还支持包含在遍历文档树和搜索文档树中的一些特性,
通过unicode()方法可以直接将 NavigableString 对象转换成 Unicode 字符串:
'''
unicode_string = unicode(tag.string)
unicode_string
# u'Extremely bold'
type(unicode_string)
# <type 'unicode'>
'''
tag中包含的字符串不能编辑,但是可以被替换成其它的字符串,用replace_with()方法:
'''
Beautiful Soup 4.2.0 doc_tag、Name、Attributes、多值属性的更多相关文章
- Beautiful Soup 4.2.0 文档
Beautiful Soup 4.2.0 文档 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方 ...
- 吴裕雄--天生自然python学习笔记:Beautiful Soup 4.2.0模块
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...
- Beautiful Soup 4.4.0 基本使用方法
Beautiful Soup 4.4.0 基本使用方法Beautiful Soup 安装 pip install beautifulsoup4 标准库有html.parser解析器但速度不是很快一般 ...
- Beautiful Soup 4.2.0
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式 快速开始 pip install beaut ...
- Beautiful Soup 4.2.0 文档(一)
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...
- 转:Beautiful Soup
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...
- Beautiful Soup 学习手册
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式 快速开始 下面的一段HTML代码将作为例 ...
- (17)python Beautiful Soup 4.6
一.安装 1.登陆官网:https://www.crummy.com/software/BeautifulSoup/ 2.下载 3.解压 4.安装 cmd找到文件路径,运行 setup.py buil ...
- Beautiful Soup 中文文档
Beautiful Soup 3.0 中文文档说明: http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html Be ...
随机推荐
- localStorage和sessionStorage使用
localStorage.setItem("key","value");//存数据 localStorage.getItem("key"); ...
- java数据结构----哈希表
1.哈希表:它是一种数据结构,可以提供快速的插入操作和查找操作.如果哈希表中有多少数据项,插入和删除操作只需要接近常量的时间.即O(1)的时间级.在计算机中如果需要一秒内查找上千条记录,通常使用哈希表 ...
- 牛客寒假6-E.海啸
链接:https://ac.nowcoder.com/acm/contest/332/E 题意: 有一个沿海地区,可以看作有n行m列的城市,第i行第j列的城市海拔为h[i][j]. 由于沿海,所以这个 ...
- Jasper_crosstab_measure_display a value of field in crosstab total row
1.create a measure <measure name="myField" class="java.lang.String"> <m ...
- Oracle / PLSQL写语句 常用的几个函数
下面开始记录一下,自己在Oracle或者PLSQL常用的几个函数, 1add_months 增加或减去月份2. last_day(sysdate) 返回日期的最后一天3. months_between ...
- jQuery插件pagination.js源码解读
pagination的github地址:https://github.com/gbirke/jquery_pagination 公司用的是1.2的版本,所以我就读1.2的了. jQuery.fn.pa ...
- BIO,NIO,AIO总结
熟练掌握 BIO,NIO,AIO 的基本概念以及一些常见问题是你准备面试的过程中不可或缺的一部分,另外这些知识点也是你学习 Netty 的基础. BIO,NIO,AIO 总结 1. BIO (Bloc ...
- CentOS 7.4升级curl和git到最新版本
升级curl和git到最新版本 [root@jenkins ~]# yum install -y curl-devel expat-devel gettext-devel openssl-devel ...
- Unity Shader入门精要学习笔记 - 第16章 Unity中的渲染优化技术
转自冯乐乐的 <Unity Shader 入门精要> 移动平台的特点 为了尽可能一处那些隐藏的表面,减少overdraw(即一个像素被绘制多次),PowerVR芯片(通常用于ios设备和某 ...
- 访问者模式和php实现
访问者模式: 表示作用于某个对象结构中的各个元素的操作.它使你可以在不改变各个元素类的前提下定义作用于这些元素的操作. 角色: 1)抽象访问者:为该对象结构中具体元素角色声明一个访问操作接口.该操作接 ...