在用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解析包的更多相关文章

  1. python BeautifulSoup html解析

    * BeautifulSoup 的.find(), .findAll() 函数原型 findAll(tag, attributes, recursive, text, limit, keywords) ...

  2. python爬虫数据解析之BeautifulSoup

    BeautifulSoup是一个可以从HTML或者XML文件中提取数据的python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. BeautfulSoup是python爬虫三 ...

  3. Python HTML解析器BeautifulSoup(爬虫解析器)

    BeautifulSoup简介 我们知道,Python拥有出色的内置HTML解析器模块——HTMLParser,然而还有一个功能更为强大的HTML或XML解析工具——BeautifulSoup(美味的 ...

  4. 解析Python编程中的包结构

    解析Python编程中的包结构 假设你想设计一个模块集(也就是一个"包")来统一处理声音文件和声音数据.通常由它们的扩展有不同的声音格式,例如:WAV,AIFF,AU),所以你可能 ...

  5. Python爬虫【解析库之beautifulsoup】

    解析库的安装 pip3 install beautifulsoup4 初始化 BeautifulSoup(str,"解析库") from bs4 import BeautifulS ...

  6. 【Python】 xml解析与生成 xml

    xml *之前用的时候也没想到..其实用BeautifulSoup就可以解析xml啊..因为html只是xml的一种实现方式吧.但是很蛋疼的一点就是,bs不提供获取对象的方法,其find大多获取的都是 ...

  7. python 深入模块和包

    模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...

  8. python socket发送魔法包网络唤醒开机.py

    python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...

  9. Python zxing 库解析(条形码二维码识别)

    各种扫码软件 最近要做个二维码识别的项目,查到二维码识别有好多开源的不开源的软件 http://www.oschina.net/project/tag/238/ Zbar 首先试了一下Zbar,pyt ...

随机推荐

  1. AUTOIT3设置用户包含目录

     

  2. LPTSTR\LPCTSTR\LPWSTR\LPCWSTR 字母的意思 及 区别

    标签: 杂谈 分类: VC     char*   是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容.        LP的含义 ...

  3. 多个类的DLL封装及调用

    #define FaceLIBDLL #include "stdafx.h" #include "facedll.h" #include <opencv2 ...

  4. java1.7集合源码阅读:ArrayList

    ArrayList是jdk1.2开始新增的List实现,首先看看类定义: public class ArrayList<E> extends AbstractList<E> i ...

  5. 使用Laravel将数据Excel导出的方法

    1.copmposer下载maatwebsite/excel 2.在控制器引入:use Excel; 3.将要导出的数据处理成数组,第一组数据为表的字段名,如图 4.导出成表格 Excel::crea ...

  6. DotNetCore 笔记

    最近公司框架升级到DotNetCore了,但是在用post请求的时候,发现页面的post data后台并没有接收到数据,经过调查发现,netcore用法和之前的MVC5不一样,想要接收post里的da ...

  7. JavaScript基础之原型对象和原型链

    原型对象 原型对象简单来说就是函数的原型所指向的对象.前面说原型的时候,说了Object.prototype所指对象就是Object(函数)的原型对象.在每个函数的原型对象中,默认会有construc ...

  8. Xamarin XAML语言教程使用使用Progress属性设置当前进度

    Xamarin XAML语言教程使用使用Progress属性设置当前进度 开发者除了可以在XAML中使用Progress属性设置进度条的当前进度外,还可以在代码隐藏文件中使用Progress属性来设置 ...

  9. Burnside引理与polay定理

    #Burnside引理与polay定理 引入概念 1.置换 简单来说就是最元素进行重排列 是所有元素的异议映射,即\([1,n]\)映射到\([1,n]\) \[ \begin{pmatrix} 1& ...

  10. Android开发之onCreate

    最近看了一些开发人员做的APP开发,虽然都实现了比较完美的功能,不过很多地方很是牵强!我觉得:作为一个合格软件工程师,最重要的不是你写过多少代码,而是你研究过多少代码!所以,我更倡导多研究系统原本定制 ...