python学习笔记——BeautifulSoupa

详细用法参考文档:点击打开链接

主要记录各种查找用法:

导入:

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的<a>标签

limit参数:(当搜索结果达到limit限制时,就停止搜索)

soup.find_all('a',limit=2)  #只返回两个<a>标签

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'的<a> 标签

7 / 通过多种CSS属性查找

soup.select('#link1, #link2')  #查找含有id = 'link1' 或者id = 'link2'的标签

8 / 通过标签存在的某个属性来查找

soup.select('a[href]')  #查找包含href的<a>标签

9 / 通过属性的值查找

soup.select('a[href="http://example.com/elsie"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]

soup.select('a[href^="http://example.com/"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

soup.select('a[href$="tillie"]')
# [<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

soup.select('a[href*=".com/el"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
10 / 返回查找的第一个

soup.select_one('.sister')  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章