四叶草 2020-05-05
快速使用
from bs4 import BeautifulSoup soup = BeautifulSoup(html,‘lxml‘)
一、基本使用
1、标签选择器 soup.标签名---获取这个标签内容,如果有多个该标签,就返回第一个
from bs4 import BeautifulSoup soup = BeautifulSoup(html,‘lxml‘) print(soup.p.contents) #将p标签下所有的子标签存入到一个列表中
print(soup.p.children) for i,child in enumerate(soup.p.children): print(i,child)
print(soup.descendants)
soup.a.parent -- 获取父节点信息
list( enumerate(soup.a.parents) ) -- 获取祖先节点的信息
soup.a.next_siblings 获取后面的兄弟节点
soup.a.previous_sibling 获取前面兄弟节点
soup.a.next_sibling 获取下一个兄弟标签
soup.a.previous_sibling 获取上一个兄弟标签
2、标准选择器
find_all( name, attrs, recursive, text, **kwargs ) 根据标签名,属性,内容查找文档
html=‘‘‘ <div class="panel"> <div class="panel-heading"> <h4>Hello</h4> </div> <div class="panel-body"> <ul class="list" id="list-1" name="elements"> <li class="element">Foo</li> <li class="element">Bar</li> <li class="element">Jay</li> </ul> <ul class="list list-small" id="list-2"> <li class="element">Foo</li> <li class="element">Bar</li> </ul> </div> </div> ‘‘‘ soup = BeautifulSoup( html,‘lxml‘ ) #根据name #获取ul 循环获取内部的li标签信息 for ul in soup.find_all( ‘ul‘ ): print( ul.find_all(‘li‘) ) #根据attrs #注意:查找class相关的 修改attrs = { ‘class_‘ : ‘element‘ } 或者 soup.find_all( "",{ ‘class‘:‘element‘ } ) print( soup.find_all(attrs={ ‘id‘:‘list-1‘ }) ) print( soup.find_all(attrs={ ‘name‘:‘elements‘ }) ) #根据text print(soup.find_all( text=‘Foo‘ ))
find(name, attrs, recursive, text, **kwargs) -- 返回匹配结果的第一个元素
其他类似用法:
find_parents() 返回所有祖先节点 find_parentd()返回直接父结点
find_next_silings() 返回后面所有的兄弟节点 find_next_sibling() 返回第一个
find_previous_siblings() find_previous_sibling()
find_all_next() 返回节点后所符合条件的结点 find_next()返回第一个符合条件的节点
find_all_previous() find_previous()
3、css选择器
通过select()直接传入css选择器
规则:
from bs4 import BeautifulSoup soup = BeautifulSoup(html,‘lxml‘) soup.select(‘.panel .panel-heading‘) #返回class为panel中class为panel-heading的标签 soup.select(‘ul li‘) #返回所有ul中的li标签 soup.select(‘#list-2 .element‘) #返回id为list-2 类为element的所有标签 soup.select(‘ul‘)[0] #返回第一个ul标签中的标签
4、获取内容 get_text()
5、获取属性 [属性名] 或者 .attrs[属性名]
for ul in soup.select(‘ul‘): print(ul[‘id‘]) print(ul.attrs[‘id‘])