用Python解析HTML,BeautifulSoup使用简介
by cnDenis, http://cndenis.iteye.com,
2012年12月12日
Beautiful Soup,字面意思是美好的汤,是一个用于解析HTML文件的Python库。主页在 http://www.crummy.com/software/BeautifulSoup/
, 下载与安装无需啰嗦,这里就介绍一下它的使用吧。
装汤——Making the Soup
首先要把待解析的HTML装入BeautifulSoup。BeautifulSoup可以接受文件句柄或是字符串作为输入:
from bs4 import BeautifulSoup
fp = open("index.html")
soup1 = BeautifulSoup(fp)
soup2 = BeautifulSoup("<html>data</html>")
汤料——Soup中的对象
标签(Tag)
标签对应于HTML元素,也就是应于一对HTML标签以及括起来的内容(包括内层标签和文本),如:
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
tag = soup.b
soup.b就是一个标签,soup其实也可以视为是一个标签,其实整个HTML就是由一层套一层的标签组成的。
名字(Name)
名字对应于HTML标签中的名字(也就是尖括号里的第一项)。每个标签都具有名字,标签的名字使用.name
来访问,例如上例中,
tag.name == u'b'
soup.name == u'[document]'
属性(Atrriutes)
属性对应于HTML标签中的属性部分(也就是尖括号里带等号的那些)。标签可以有许多属性,也可以没有属性。属性使用类似于字典的形式访问,用方括号加属性名,例如上例中,
tag['class'] == u'boldest'
可以使用.attrs直接获得这个字典,例如,
tag.attrs == {u'class': u'boldest'}
文本(Text)
文本对应于HTML中的文本(也就是尖括号外的部分)。文件使用.text
来访问,例如上例中,
tag.text == u'Extremely bold'
找汤料——Soup中的查找
解析一个HTML通常是为了找到感兴趣的部分,并提取出来。BeautifulSoup提供了find
和find_all
的方法进行查找。find
只返回找到的第一个标签,而find_all
则返回一个列表。因为查找用得很多,所以BeautifulSoup做了一些很方便的简化的使用方式:
tag.find_all("a") #等价于 tag("a")
tag.find("a") #等价于 tag.a
因为找不到的话,find_all返回空列表,find
返回None
,而不会抛出异常,所以,也不用担心
tag("a")
或 tag.a
会因为找不到而报错。限于python的语法对变量名的规定,tag.a
的形式只能是按名字查找,因为点号.后面只能接变量名,而带括号的形式
tag()
或 tag.find()
则可用于以下的各种查找方式。
查找可以使用多种方式:字符串、列表、键-值(字典)、正则表达式、函数
-
字符串: 字符串会匹配标签的名字,例如 tag.a
或 tag("a")
-
列表: 可以按一个字符串列表查找,返回名字匹配任意一个字符串的标签。例如 tag("h2",
"p")
-
键-值: 可以用tag(key=value)
的形式,来按标签的属性查找。键-值查找里有比较多的小花招,这里列几条:
- class
class
是Python的保留字,不能当变量名用,偏偏在HTML中会有很多
class=XXX
的情况,BeautifulSoup的解决方法是加一下划线,用 class_
代替,如
tag(class_=XXX)
。
- True
当值为True时,会匹配所有带这个键的标签,如 tag(href=True)
- text
text做为键时表示查找按标签中的文本查找,如
tag(text=something)
-
正则表达式: 例如 tag(href=re.compile("elsie"))
-
函数: 当以上方法都行不通时,函数是终极方法。写一个以单个标签为参数的函数,传入 find
或
find_all
进行查找。如
def fun(tag):
return tag.has_key("class") and not tag.has_key("id")
tag(fun) # 会返回所有带class属性但不带id属性的标签
再来一碗——按文档的结构查找
HTML可以解析成一棵标签树,因此也可以按标签在树中的相互关系来查找。
以上四个都只会查同一父节点下的兄弟
以上的这些查找的参都和find
一样,可以搭配着用。
看颜色选汤——按CSS查找
用 .select()
方法,看 http://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors
一些小花招
- BeautifulSoup 可以支持多种解析器,如lxml, html5lib, html.parser.
如:
BeautifulSoup("<a></b>", "html.parser")
具体表现可参考 http://www.crummy.com/software/BeautifulSoup/bs4/doc/#differences-between-parsers
分享到:
相关推荐
本文实例讲述了Python HTML解析器BeautifulSoup用法。分享给大家供大家参考,具体如下: BeautifulSoup简介 我们知道,Python拥有出色的内置HTML解析器模块——HTMLParser,然而还有一个功能更为强大的HTML或XML解析...
HTML解析库BeautifulSoup4 HTML解析库BeautifulSoup4!!!
beautifulsoup4库也称为Beautiful Soup库或bs4库,用于解析和处理HTML和XML文件,其最大优点是能够根据HTML和XML语法建立解析树,进而提高解析效率。;由于beautifulsoup4库是第三方库,因此,需要通过pip3指令进行...
BeautifulSoup库是灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实现网页信息的提取。 Python常用解析库 解析器 使用方法 优势 劣势 Python标准库 BeautifulSoup...
Beautiful Soup 是一个可以从 HTML 或 XML 格式文件中提取数据的 Python 库,他可以将HTML 或 XML 数据解析为Python 对象,以方便通过Python代码进行处理。 文档环境 Centos7.5 Python2.7 BeautifulSoup4 ...
主要介绍了Python使用BeautifulSoup库解析HTML基本使用教程,文中主要对其适合于制作爬虫方面的特性进行了解析,需要的朋友可以参考下
前言 Beautiful Soup是python的一个HTML或XML的解析库,我们可以用它来方便的从网页中提取数据,它拥有强大的API和多样的解析方式。 Beautiful Soup的三个特点: ... Beautiful Soup位于流行的Python解析器(如lxml和h
python处理xml很实用好用的工具 主要有BeautifulSoup和BeautifulStoneSoup,import就好,前者处理html,后者处理xml 具体使用方法可以上网查
BeautifulSoup Html解析基本使用解析器的使用解析器使用方法优势劣势Python标准库BeautifulSoup(markup, "html.pa
然后,它使用BeautifulSoup来解析HTML,并查找网页的标签来获取标题。最后,它将标题打印出来。 请注意,这只是一个简单的示例,用于演示如何使用Python进行基本的网页爬取。在实际应用中,你可能需要处理更复杂的...
复制代码 代码如下:# coding=utf-8 from BeautifulSoup import BeautifulSoup, Tag, NavigableString from SentenceSpliter import SentenceSpliter from os.path import basename,dirname,isdir,isfile from os ...
python解析网页,无出BeautifulSoup左右,此是序言 安装 BeautifulSoup4以后的安装需要用eazy_install,如果不需要最新的功能,安装版本3就够了,千万别以为老版本就怎么怎么不好,想当初也是千万人在用的啊。安装很...
上传Python培训课件,关于文件相关ppt和相关代码如有需要请多多关注csdn博客http://blog.csdn.net/shenfuli
BeautifulSoup是python的一个库,最主要的功能是从网页...下面这篇文章主要给大家介绍了关于Python利用BeautifulSoup解析Html的方法示例,文中通过示例代码介绍的非常详细,需要的朋友们下面跟着小编来一起学习学习吧。