beautifulsoup

 

解析器 使用方法 优势 劣势
Python标准库 BeautifulSoup(markup, “html.parser”) Python的内置标准库、执行速度适中 、文档容错能力强 Python 2.7.3 or 3.2.2)前的版本中文容错能力差
lxml HTML 解析器 BeautifulSoup(markup, “lxml”) 速度快、文档容错能力强 需要安装C语言库
lxml XML 解析器 BeautifulSoup(markup, “xml”) 速度快、唯一支持XML的解析器 需要安装C语言库
html5lib BeautifulSoup(markup, “html5lib”) 最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档 速度慢、不依赖外部扩展

 

基本用法from bs4 import BeautifulSoup

html=’<div class=”ff”>6666</div>

soup=BeautifulSoup(”)

选择元素soup.div –获取节点标签,输出为’<div class=”ff”>6666</div>soup.div.string

–获取标签文本 输出 6666

soup.prettify() –标准化 自动补全html文档前后标签

输出

<html>\n <body>\n <div class=”ff”>\n 6665\n </div>\n </body>\n</html>

选择名称

soup.div.name >> div

选择属性

soup.div.attrs[‘class’]

soup.div[‘class’]

–均输出列表 [‘ff’]

选择内容soup.div.string

–只返回第一个html=’<div class=”ff”><span>6666</span></div>soup.div.span.string

子节点

soup.p.contents >>出来一个列表,包含空格

soup.p.children >>出来一个迭代器

soup.p.descendants >>出来一个生成器

soup.a.parent –当前元素的父节点

soup.a.parents –当前元素的所以父节点

list(soup.a.next_siblings) –所有兄弟节点 (生成器)标准选择器

soup.find(‘ul’) >>查找第一个ul节点并返回标签内容

<ul class=”list” id=”list-1″>\n<li class=”element”>Foo</li>\n<li class=”element”>Bar</li>\n<li class=”element”>Jay</li>\n</ul>

soup.find_all(‘ul’) –查找所有ul标签并返回列表

[<ul class=”list” id=”list-1″>\n<li class=”element”>Foo</li>\n<li class=”element”>Bar</li>\n<li class=”element”>Jay</li>\n</ul>, <ul class=”list list-small” id=”list-2″>\n<li class=”element”>Foo</li>\n<li class=”element”>Bar</li>\n</ul>]

attrs

soup.find_all(attrs={‘name’: ‘elements’}) –attrs属性选择器,内接一个对象

[<ul class=”list” id=”list-1″ name=”elements”>\n<li class=”element”>Foo</li>\n<li class=”element”>Bar</li>\n<li class=”element”>Jay</li>\n</ul>]

直接class,id选择器

soup.find_all(class=”list list-small”) –class是关键字

text

soup.find_all(text=”Bar”) >> [u’Bar’, u’Bar’]

find

find_parents()

find_parent()

find_parents()返回所有祖先节点,find_parent()返回直接父节点。

find_next_siblings() find_next_sibling()

find_next_siblings() find_next_sibling()find_next_siblings()返回后面所有兄弟节点,find_next_sibling()返回后面第一个兄弟节点。find_next_siblings()返回后面所有兄弟节点,find_next_sibling()返回后面第一个兄弟节点。

find_previous_siblings() find_previous_sibling()

find_previous_siblings() find_previous_sibling()find_previous_siblings()返回前面所有兄弟节点,find_previous_sibling()返回前面第一个兄弟节点。find_previous_siblings()返回前面所有兄弟节点,find_previous_sibling()返回前面第一个兄弟节点。

find_all_next() find_next()

find_all_next() find_next()find_all_next()返回节点后所有符合条件的节点, find_next()返回第一个符合条件的节点find_all_next()返回节点后所有符合条件的节点, find_next()返回第一个符合条件的节点

find_all_previous() 和 find_previous()

find_all_previous() 和 find_previous()find_all_previous()返回节点后所有符合条件的节点, find_previous()返回第一个符合条件的节点find_all_previous()返回节点后所有符合条件的节点, find_previous()返回第一个符合条件的节点

CSS选择器 用select()
soup.select(‘.panel-heading’) 查找类名为panel-heading的标签,返回列表
soup.select(‘li’)[2]
可以进行for
for ul in soup.select(‘ul’):
print(ul.select(‘li’))
[<li class=”element”>Foo</li>, <li class=”element”>Bar</li>, <li class=”element”>Jay</li>] [<li class=”element”>Foo</li>, <li class=”element”>Bar</li>]
获取属性值
for i in soup.select(‘ul’):
print i[‘id’]
输出
list-1 list-2
获取第2个元素的属性id值
soup.select(‘ul.list’)[1][‘id’]
获取标签文本内容
for li in soup.select(‘li’):
print(li.get_text())
soup.select(‘li’)[2].get_text()

赞(0) 打赏
未经允许不得转载:http://www.yueguangzu.net逗逗网 » beautifulsoup
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏