详细用法参考文档:点击打开链接
主要记录各种查找用法:
导入:
from bs4 import BeautifulSoup
对象:
Tag
soup = BeautifulSoup('< b class = ''boldest'' ')
tag = soup.b
type(tag)
Tag 有两个最重要的属性:name ,attributes
tag.name 获取Tag的名字
tag.attrs 获取Tag的属性和属性值
tag['属性名'] 获取Tag的属性值
过滤器:
字符串,正则表达式,方法,True
搜索的方法:
————find_all(),find()
1 / 通过标签名来搜索
find_all('b') #搜索文档中所有的b标签
2 / 通过正则表达式来搜索.如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match()
来匹配内容.
for tag in soup.find_all(re.compile('^b')):
print(tag.name)
3 / 通过列表匹配多个 。如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回.
soup.find_all( [ 'a' , 'b' ])
4 / 通过方法参数进行匹配
——— 1) 匹配符合的Tag
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
soup.find_all(has_class_but_no_id)
———2)匹配搜索一类标签属性 ( 通过一个方法来过滤一类标签属性的时候, 这个方法的参数是要被过滤的属性的值, 而不是这个标签)
defnot_lacie(href):
return href and not re.compile('lacie').search(href)
soup.find_all(href = not_lacie)
find_all()使用细节:
keywords(关键字)方式:
find_all( name , attrs , recursive , string , **kwargs )
1 / 通过Tag名字搜索
soup.find_all('a') #搜索出全部a标签
2 / 通过id搜索
soup.find_all(id = 'L') #搜索出id ='L'的标签
3 / 通过属性参数搜索
soup.find_all(href = re.compile('elise')) #匹配每一个Tag的href属性,找到含有elise的href属性的Tag
soup.find_all(id=True) #匹配出含有id的标签
4 / 通过多属性搜索
soup.find_all(href = re.compile('elise') , id = 'L') #
5 / 通过attrs参数搜索特殊属性,用attrs定义字典。
data_soup.find_all(attrs = {'data-foo':'value})
CSS类名方式 :class_参数:
接受不同类型的过滤器:字符串,正则表达式,方法,True
1 / 通过class_参数所有指定Tag
soup.find_all('a',class_='sister')
soup.find_all('a',attrs = {'class':'sister'})
string参数:
1 / soup.find_all(string='elise') #搜索文档中的elise
2 / soup.find_all(string=['elise','babi','hose']) #搜索多个子串
3 / soup.find_all(string = re.compile{'elise')) #搜索包含elise的字符串
4 / 搜索内容里包含指定字符串的Tag
soup.find_all('a',string='elise) #搜索内容里包含elise的标签
limit参数:(当搜索结果达到limit限制时,就停止搜索)
soup.find_all('a',limit=2) #只返回两个标签
recursive=False参数:(只搜索当前Tag直接子节点)
soup.find_all('title',recursive=False)
————select()方法 (CSS选择器):
1 / 通过字符串参数搜索
soup.select('title') #搜索所有tittle标签
soup.select('p nth-of-type(3)') #搜索第三个p标签
2 / 通过tag标签逐层查找
soup.select('body a')
soup.select('html head title')
3 / 找到某个标签下的直接子标签
soup.select('head > title')
soup.select('p > a')
soup.select('p > a:nth-of-type(2)')
soup.select('p > #link1')
soup.select('body > a')
4 / 查找兄弟节点标签
soup.select('#link1 ~ .sister') #查找id='link1'所在标签的所有兄弟节点
soup.select('#link1 + .sister') #查找id='link1'所在标签的第一个兄弟节点
5 / 通过类名查找
soup.select('.sister') #查找class=‘sister'的第一个标签
soup.select('class~ = 'sister') #查找所有class = ’sister‘的标签
6 / 通过Tag的id查找
soup.select('#link1') #查找id = 'link1'的标签
soup.select('a#link1') #查找id = 'link1'的 标签
7 / 通过多种CSS属性查找
soup.select('#link1, #link2') #查找含有id = 'link1' 或者id = 'link2'的标签
8 / 通过标签存在的某个属性来查找
soup.select('a[href]') #查找包含href的标签
9 / 通过属性的值查找
soup.select('a[href="http://example.com/elsie"]')
# [Elsie]
soup.select('a[href^="http://example.com/"]')
# [Elsie,
# Lacie,
# Tillie]
soup.select('a[href$="tillie"]')
# [Tillie]
soup.select('a[href*=".com/el"]')
# [Elsie]
10 / 返回
查找的第一个
soup.select_one('.sister')