python beautifulsoup python beautifulsoup4( 四 )


返回结果不再是列表形式,而是第一个匹配的节点元素,类型依然是 Tag 类型 。
其它方法
另外还有许多的查询方法,用法与前面介绍的 find_all、find 方法完全相同,只不过查询范围不同,在此做一下简单的说明 。
find_parents 和 find_parent:前者返回所有祖先节点,后者返回直接父节点 。
find_next_siblings 和 find_next_sibling:前者返回后面所有的兄弟节点,后者返回后面第一个兄弟节点 。
find_previous_siblings 和 find_previous_sibling:前者返回前面所有的兄弟节点,后者返回前面第一个兄弟节点 。
find_all_next 和 find_next:前者返回节点后所有符合条件的节点,后者返回第一个符合条件的节点 。
find_all_previous 和 find_previous:前者返回节点前所有符合条件的节点,后者返回第一个符合条件的节点 。
CSS选择器
BeautifulSoup还提供了另外一种选择器,CSS选择器 。如果对 Web 开发熟悉的话,那么对 CSS 选择器肯定也不陌生 。如果不熟悉的话,可以参考 http://.w3school.com /cssref/css_selectors.asp 了解 。
使用 CSS 选择器,只需要调用 select 方法,传入相应的 CSS 选择器即可,我们用一个实例来感受一下:
html5='''<div class="panel"><div class="panel-heading"><h4>Hello</h4></div><div class="panel-body"><ul class="list" id="list-1"><li class="element">钢铁</li><li class="element">知识</li><li class="element">仓库</li></ul><ul class="list list-small" id="list-2"><li class="element">python</li><li class="element">java</li></ul></div></div>'''from bs4 import BeautifulSoupsoup = BeautifulSoup(html5, 'lxml')print(soup.select('.panel .panel-heading'))print(soup.select('ul li'))print(soup.select('#list-2 .element'))print(type(soup.select('ul')[0]))'''[<div class="panel-heading"><h4>Hello</h4></div>][<li class="element">钢铁</li>, <li class="element">知识</li>, <li class="element">仓库</li>, <li class="element">python</li>, <li class="element">java</li>][<li class="element">python</li>, <li class="element">java</li>]<class 'bs4.element.Tag'>'''
结果为所有匹配的节点 。例如select('ul li')则是所有ul节点下面的所有li节点,返回结果是列表 。
select 方法同样支持嵌套选择(soup.select('ul'))、属性获取(ul['id']),以及文本获取(li.string/li.get_text())
---- 钢铁知识库 2022.08.22
结语
到此 BeautifulSoup 的使用介绍基本就结束了,最后钢铁知识库做一下简单的总结:

  • 推荐使用 LXML 解析库,速度快、容错能力强 。
  • 建议使用 find、find_all 方法查询匹配单个结果或者多个结果 。
  • 如果对 CSS 选择器熟悉的话可以使用 select 匹配,可以像Xpath一样匹配所有 。

来源:https:// blogs.com/jiba/p/16613724.html


推荐阅读