解析器 | 使用方法 | 优势 | 劣势 |
---|---|---|---|
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()返回第一个符合条件的节点
最新评论