参考资料地址:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#id28
前面已经将一个html页面以beautifulsoup对象的格式保存在了index.html中,接下来将用这个html文件用作示例练习(PS:这个时候就不要去访问网站了,直接读取保存好的文件)。
要掌握BeautifulSoup中对象操作,需要了解html的结构:http://www.runoob.com/html/html-elements.html。
Python数据分析 作者:[印尼]Ivan Idris 伊德里斯 当当 广告 购买
获得link标签的结果:
get_title = bsobj.titleprint(get_title)print(get_title.name)
结果:
结果:
结果:
作者:TMQ专项测试团队
当当 广告
购买
结果:
遍历文档树可以获得文档中的子节点、父节点、兄弟节点等标签。
要获取子节点,首先要分析子节点中的内容,一个tag标签中,通常会包含多个字符串或者多个其他的tag标签。由于字符串没有子节点,是不具备遍历属性的。
bsobj.find_all('link')
,返回的结果是一个列表。
结果:
结果:
结果:首页
这个内容,相当于是span的子节点,.descendants会把它当成子孙节点处理,其他子孙节点标签同理。
get_title = bsobj.body.div
for sting in get_title.stripped_strings:
print(sting)
结果:
写文章
注册
登录
夜间模式
开
关
...
每个tag都会包含父节点,比如前面采用bsobj.body.div
获取节点信息,body就是div的一个父节点。
get_title = bsobj.body.div.ul
print(get_title.parent)
print(get_title.parent.name)
结果:
<div class="collapse navbar-collapse" id="menu">
<ul class="nav navbar-nav">
<li class="tab ">
<a href="/">....
</li>
</ul>
</div>
div
get_title = bsobj.body.div.ul
for parent in get_title.parents:
if parent is None:
print(parent)
else:
print(parent.name)
结果:
div
div
div
nav
body
html
[document]
标签处于同一层的节点,他们的父节点是同一个,这样的节点称为兄弟节点。
get_title = bsobj.head.meta
print(get_title)
print(get_title.previous_sibling)
print(get_title.next_sibling)
get_title = bsobj.head.meta
for sibling in get_title.next_siblings:
print(repr(sibling))
结果:
'\n'<meta content="IE=Edge" http-equiv="X-UA-Compatible"/>'\n'<meta content="width=device-width, initial-scale=1.0,user-scalable=no" .../>
...
让解析的属性指向上一个被解析对象或下一个被解析对象。
get_title = bsobj.body.div.ul.li.span
print(get_title)
print(get_title.nex_sibling)
print(get_title.next_element)
结果:
<span class="menu-text">
首页 </span>None
首页
get_title = bsobj.body.div.ul.li.span
for element in get_title.next_elements:
print(repr(element))