参考资料地址:https://www./software/BeautifulSoup/bs4/doc.zh/#id28
练习数据准备
BeautifulSoup学习前面已经将一个html页面以beautifulsoup对象的格式保存在了index.html中,接下来将用这个html文件用作示例练习(PS:这个时候就不要去访问网站了,直接读取保存好的文件)。 1、对象的种类要掌握BeautifulSoup中对象操作,需要了解html的结构:http://www.runoob.com/html/html-elements.html。
获得link标签的结果:
get_title = bsobj.titleprint(get_title)print(get_title.name) 结果:
结果:
结果:
结果:
2、遍历文档树遍历文档树可以获得文档中的子节点、父节点、兄弟节点等标签。 子节点:tag.name、tag.contents、tag.string、tag.strings、tag.stripped_strings等 父节点:tag.parent、tag.parents 兄弟节点:next_sibling、previous_sibling、next_siblings、previous_siblings 回退和前进:.next_elements、.previous_elements、next_element 和 .previous_element
1、子节点要获取子节点,首先要分析子节点中的内容,一个tag标签中,通常会包含多个字符串或者多个其他的tag标签。由于字符串没有子节点,是不具备遍历属性的。
结果:
结果:
结果:首页 这个内容,相当于是span的子节点,.descendants会把它当成子孙节点处理,其他子孙节点标签同理。
4)、.string:获取NavigableString 类型子节点 当一个tag只有一个NavigableString 类型子节点时,可以采用.string获取,但是当有多个子节点时,.string无法得知获取哪一个,会直接返回None。 5)、.strings 和 stripped_strings:获取一组NavigableString 类型子节点 .strings获取的信息中,包含空行,stripped_strings可以去除前后所有的空行以及为空的内容
get_title = bsobj.body.div for sting in get_title.stripped_strings: print(sting) 结果: 写文章
注册
登录
夜间模式
开
关
... 2、父节点每个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] 3、兄弟节点标签处于同一层的节点,他们的父节点是同一个,这样的节点称为兄弟节点。 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" .../>
... 4、回退和前进让解析的属性指向上一个被解析对象或下一个被解析对象。 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)) 总结本节学习了beautifulsoup的tag对象、遍历文档树的使用 通过查找子节点、父节点等信息,可以获取到想要的标签信息 通过获取标签信息的.name、.attrs等,可以获取精确的信息 后续继续学习搜索文档树
作者:乐大爷L 链接:https://www.jianshu.com/p/a0ff9f70e9a7 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
|