当前位置:首页 > 科技 >

Beautiful Soup 4库--python2.x(超长学习日记)

发布时间:2017-09-13 12:39:44

Beautiful Soup 4库--python2.x(超长学习日记)

(内容摘自官方文档(中文))

只是把 我做爬虫暂时要用到的方法类整理了下,具体的数据结构 和 不常用的没有看

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.

一:简单用法

文档示例(html文档)

html_doc = """

The Dormouse's story

Once upon a time there were three little sisters; and their names were Elsie, Lacie and Tillie; and they lived at the bottom of a well.

...

"""

使用BeautifulSoup解析这段代码,得到一个 BeautifulSoup 的对象

from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc)

按照标准的缩进格式的结构输出:

print(soup.prettify()) # ## ###

# # The Dormouse's story # #

#

# Once upon a time there were three little sisters; and their names were # # Elsie # # , # # Lacie # # and # # Tillie # # ; and they lived at the bottom of a well. #

#

# ... #

# #

几个简单的浏览结构化数据的方法:

soup.title # soup.title.name # u'title' soup.title.string # u'The Dormouse's story' soup.title.parent.name # u'head' soup.p #

The Dormouse's story

soup.p['class'] # u'title' soup.a # Elsie soup.find_all('a') # [Elsie, # Lacie, # Tillie] soup.find(id="link3") # Tillie

从文档中找到所有标签的链接:

for link in soup.find_all('a'): print(link.get('href')) # # #

从文档中获取所有文字内容:

print(soup.get_text()) # The Dormouse's story # # The Dormouse's story # # Once upon a time there were three little sisters; and their names were # Elsie, # Lacie and # Tillie; # and they lived at the bottom of a well. # # ...

二:主要解析器

Python标准库

Python的内置标准库 执行速度适中 文档容错能力强 Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差

lxml HTML 解析器

速度快 文档容错能力强 需要安装C语言库

lxml XML 解析器

速度快 唯一支持XML的解析器 需要安装C语言库

html5lib

最好的容错性 以浏览器的方式解析文档 生成HTML5格式的文档 速度慢 不依赖外部扩展

推荐使用:
lxml作为解析器,因为效率更高. 在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定.

三:使用beautifulsoup
将一段文档传入BeautifulSoup 的构造方法,就能得到一个文档的对象

from bs4 import BeautifulSoup soup = BeautifulSoup(open("index.html")) soup = BeautifulSoup(" data")

首先,文档被转换成Unicode,并且HTML的实例都被转换成Unicode编码

BeautifulSoup("Sacré bleu!") Sacré bleu!

然后,Beautiful Soup选择最合适的解析器来解析这段文档,如果手动指定解析器那么Beautiful Soup会选择指定的解析器来解析文档

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment .

1.Tag对象

方法:’.name‘

soup = BeautifulSoup('Extremely bold') tag = soup.b type(tag) # tag.name # u'b' tag.name = "blockquote" tag #Extremely bold

属性:’.attrs‘

# tag的属性的操作方法与字典相同: # 可以被添加,删除或修改 tag['class'] # u'boldest' tag.attrs # {u'class': u'boldest'} ag['class'] = 'verybold' tag['id'] = 1 tag # Extremely bold del tag['class'] del tag['id'] tag # Extremely bold tag['class'] # KeyError: 'class' print(tag.get('class')) # None

多值属性

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:荆门SEO http://jingmen.raoyu.net