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 ...
随机推荐
- java数据结构----数组篇
1.数组作为java常用的数据结构之一,使用相对简单,下图展示了数组常用操作在允许和不允许重复值的情况下的比较次数 2.进行封装后的代码: package com.cn.higharray; /** ...
- [题解](树形dp/换根)小x游世界树
2. 小x游世界树 (yggdrasi.pas/c/cpp) [问题描述] 小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据说那里埋藏着亚瑟王的宝藏,这引起了小x的好奇,但当 ...
- djangoForm组件
https://www.cnblogs.com/jabbok/p/9273786.html 在之前学习了html form信息传递到django,然后进行处理,但是这很不方便. django有自己的组 ...
- linux安装odbc for mysql
1 安装驱动包 yum install unixODBC-devel -y yum install -y mysql-connector-odbc 2 配置数据源 [root@omserver-11 ...
- Zip-line Codeforces - 650D || 风筝
https://codeforces.com/contest/650/problem/D 原题? http://210.33.19.103/contest/1024/problem/2 4s 520M ...
- 个人常用Git操作记录
本地分支与远程分支建立联系 Git - 新建本地分支与远程分支关联问题 查看本地分支与远程分支关系: git branch -vv 当前分支与远程分支建立关系: git branch --set-up ...
- Elasticsearch之安装
elasticsearch需要java8以上支持 java -version 二进制文件下载 www.elastic.co/downloads tar安装示例 1.下载tar文件 curl -L -O ...
- 538 Convert BST to Greater Tree 把二叉搜索树转换为累加树
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和.例如:输入: 二叉搜索树: ...
- Java微服务 进程间通信
目录 进程间通信 同步调用 异步调用 实现方式 进程间通信 同步调用 同步调用比较简单,一致性强,但是容易出调用问题,出现单点故障,因为之间相互依赖,比如RPC必须要依赖的模块上线可用,己方才能调用, ...
- Linux查看某个端口是否启动
查看命令 netstat -an | 执行结果: [root@test ~]# netstat -an | tcp 0.0.0.0:* LISTEN 有tcp 这一行返回说明已开放