[Python]BeautifulSoup—HTML解析包
在用Python写爬虫时,一个常见的操作是对抓下的HTML做分析处理,得到想要的内容。一般的方法为使用Python的re库中。用正則表達式来解析文本。只是这样的方法适用于全部的文本。而针对于特定格式的文本,如这里的HTML。BeautifulSoup更具有针对性,使用起来也更方便。
BeautifulSoup能够解析HTML。XML等文件,这里仅仅说明其解析HTML的功能。
BeautifulSoup(下面简称BS)的官方网站为:http://www.crummy.com/software/BeautifulSoup/
BS把HTML看做一个树形,以标签和文本为基本类型,一个标签包括其它标签。被解析为一个标签是还有一个标签的子树。那么。终于整个HTML文档被解析为一棵树的形式。
BS包含四种基本类型:
Soup(树),Tag(标签节点),String(字符节点),Comment(凝视节点)。
例如以下图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaWNlMTEwOTU2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" width="847" height="550">
这四种类型的节点构成树,Soup代表这颗树。String为叶子节点,tag为标签子节点,为其标签包括的全部内容。
建树
import bs4#导入BeautifulSoup库
Soup = BeautifulSoup(html)#当中html 能够是字符串。也能够是句柄
须要注意的是,BeautifulSoup会自己主动检測传入文件的编码格式,然后转化为Unicode格式
通过如上两句话。BS自己主动把文档生成为如上图中的解析树。
节点属性
能够通过Tag.attrs訪问,返回字典结构的属性。
或者Tag.name这样訪问特定属性值,假设是多值属性则以列表形式返回。
遍历
子节点:
Tag.Tag_child1:直接通过下标名称訪问子节点。
Tag.contents:以列表形式返回全部子节点。
Tag.children:生成器,可用于循环訪问:for child in Tag.children
String 子节点:
Tag.String:Tag仅仅有一个String子节点是,能够这么訪问,否则返回None
Tag.Strings:生成器。可用于循环訪问:for str in Tag.Strings
子孙节点:
Tag.descendants:生成器,可用于循环訪问:for des inTag.descendants
父节点:
Tag.parent:父节点
Tag.parents:父到根的全部节点
兄弟节点:
Tag.next_sibling
Tag.next_siblings
Tag.previous_sibling
Tag.previous_siblings
查找
最经常使用的是find_all()函数
方法搜索当前tag的全部tag子节点,并推断是否符合过滤器的条件。
find_all( name , attrs , recursive , text ,**kwargs )
第一个參数为Tag的名称
#第一个參数为Tag的名称,如:
tag.find_all(‘title’)
#得到”<title>&%^&*</title>”,结果为一个列表
第二个參数为匹配的属性
tag.find_all(“title”,class=”sister”)
#得到如”<title class = “sister”>%^*&</title>
第二个參数也能够为字符串,得到字符串匹配的结果
tag.find_all(“title”,”sister”)
#得到如”<title class = “sister”>%^*&</title>
完整具体的中文文档见:
http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
[Python]BeautifulSoup—HTML解析包的更多相关文章
- python BeautifulSoup html解析
* BeautifulSoup 的.find(), .findAll() 函数原型 findAll(tag, attributes, recursive, text, limit, keywords) ...
- python爬虫数据解析之BeautifulSoup
BeautifulSoup是一个可以从HTML或者XML文件中提取数据的python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. BeautfulSoup是python爬虫三 ...
- Python HTML解析器BeautifulSoup(爬虫解析器)
BeautifulSoup简介 我们知道,Python拥有出色的内置HTML解析器模块——HTMLParser,然而还有一个功能更为强大的HTML或XML解析工具——BeautifulSoup(美味的 ...
- 解析Python编程中的包结构
解析Python编程中的包结构 假设你想设计一个模块集(也就是一个"包")来统一处理声音文件和声音数据.通常由它们的扩展有不同的声音格式,例如:WAV,AIFF,AU),所以你可能 ...
- Python爬虫【解析库之beautifulsoup】
解析库的安装 pip3 install beautifulsoup4 初始化 BeautifulSoup(str,"解析库") from bs4 import BeautifulS ...
- 【Python】 xml解析与生成 xml
xml *之前用的时候也没想到..其实用BeautifulSoup就可以解析xml啊..因为html只是xml的一种实现方式吧.但是很蛋疼的一点就是,bs不提供获取对象的方法,其find大多获取的都是 ...
- python 深入模块和包
模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...
- python socket发送魔法包网络唤醒开机.py
python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...
- Python zxing 库解析(条形码二维码识别)
各种扫码软件 最近要做个二维码识别的项目,查到二维码识别有好多开源的不开源的软件 http://www.oschina.net/project/tag/238/ Zbar 首先试了一下Zbar,pyt ...
随机推荐
- 开源免费的C/C++网络库(c/c++ sockets library)(转)
原文转自 http://blog.csdn.net/weiwangchao_/article/details/8730199 (1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨 ...
- error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CStaticLink::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint) (转)
原文转自 http://blog.csdn.net/yinxing408033943/article/details/7601698 解决方法: 找到 UNIT CStaticLink::OnNcH ...
- redis介绍与配置
redis 是什么 我们都知道 mysql.oracle 是关系型数据库,它们的特点就是像一个 Excel 表格一样,而且都是用 SQL 语句.但是你可能看到一种东西叫NoSQL.NoSQL 泛指非关 ...
- 【linux高级程序设计】(第十二章)Linux多线程编程 3
条件变量通信机制 条件变量必须配合互斥锁一起实现对资源的互斥访问 使用方法: int pthread_cond_init (pthread_cond_t *__restrict __cond, __c ...
- Appium+python自动化17-启动iOS模拟器APP源码案例【转载】
前言 上一篇已经可以启动iOS模拟器上的safari浏览器了,启动app比启动浏览器要复杂一点,本篇以github上的源码为案例详细介绍如何启动iOS模拟器的app 一.clone源码 1.githu ...
- (5)C#工具箱-数据
1.DataSet 2.DataGridView dataGridView是一个显示网络数据的控件 (1)绑定dataSet DataSet ds = new DataSet(); //执行数据库查询 ...
- 最小生成树 (Minimum Spanning Tree,MST) --- Kruskal算法
本文链接:http://www.cnblogs.com/Ash-ly/p/5409265.html 引导问题: 假设要在N个城市之间建立通信联络网,则连通N个城市只需要N - 1条线路.这时,自然会考 ...
- poj3693(后缀数组)
poj3693 题意 给出一个串,求重复次数最多的连续重复子串,输出字典序最小的. 分析 论文 例8(P21). Sparse-Table算法预处理出任意两个后缀串的LCP. code #includ ...
- ESLint 的使用和.eslintrc.js配置
在团队协作中,为避免低级 Bug.产出风格统一的代码,会预先制定编码规范.使用 Lint 工具和代码风格检测工具,则可以辅助编码规范执行,有效控制代码质量. ESLint 简介 ESLint 由 Ja ...
- oracle exp CONSISTENT
exp相当于select,不会被其他操作锁定. 但是如果exp的时候指定了CONSISTENT = y,而数据库中又存在频繁修改,可能会导致exp的时候出现snapshot too old