[学习笔记] python爬虫进阶BeautifulSoup 超详细的find_all()和find

原文:http://bbs.fishc.com/thread-90638-1-1.html

超详细的find_all()和find

推荐阅读: BeautifulSoup节点


在之前的帖子里我们已经使用过了find_all,不过对于find_all,有的东西还得说明一下


这就是find_all和find,别急,我们慢慢来,熟练掌握find_all和find,对你写爬虫将大有帮助!

find_all( name , attrs , recursive , text , **kwargs )

find( name , attrs , recursive , text , **kwargs )



name 参数
name 参数可以查找所有名字为 name 的tag,字符串对象会被自动忽略掉.

简单的用法如下:

  1. soup.find_all("title")
  2. # [The Dormouse's story]
复制代码




keyword 参数
如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当作指定名字tag的属性来搜索,如果包含一个名字为 id 的参数,Beautiful Soup会搜索每个tag的”id”属性.

  1. soup.find_all([u]id[/u]='link2')
  2. # [Lacie]
  3. 如果传入 href 参数,Beautiful Soup会搜索每个tag的”href”属性:

  4. 搜索指定名字的属性时可以使用的参数值包括 字符串 , 正则表达式 , 列表, True .

  5. 来段代码:
  6. [code]from bs4 import BeautifulSoup as bs
  7. html = '''
  8.                

  9.                        

  10.                        

  11.                                

  12.                        

  13.                        

  14.                                

  15.                                

  16.                                

  17.                        

  18.                
  19.                

  20.                        

  21.                                

  22.                                

  23.                                

  24.                        

  25.                        

  26.                                

  27.                                

  28.                                

  29.                        

  30.                        

  31.                                

  32.                                

  33.                                

  34.                        

  35.                        

  36.                                

  37.                        

  38.                
  39.        
  40.        
  41. 鱼C信息
    鱼C信息表
    姓名 年龄 颜值
    不二如是: 18 下一位更帅~
    小甲鱼老湿: 28 下一位更帅~
    MSK: 16 第一位最帅~
    村里有个姑娘叫小花~
    '''
  42. soup = bs(html,'html.parser')
复制代码


ps:在这段代码中,只有标签拥有id

当name传入 字符串(a)时,将会查找所有name属性为a的Tag
  1. temp = soup.find_all('tr')
  2. temp
  3. #[
  4. 鱼C信息表
  5. ,
  6. 姓名
  7. 年龄
  8. 颜值
  9. ,
  10. 不二如是:
  11. 18
  12. 下一位更帅~
  13. ,
  14. 小甲鱼老湿:
  15. 28
  16. 下一位更帅~
  17. ,
  18. MSK:
  19. 16
  20. 第一位最帅~
  21. ,
  22. 村里有个姑娘叫小花~
  23. ]
复制代码


传入 正则表达式时re.compile('a'),将查找所有包含'a'的Tag
  1. soup.find_all([u]href[/u]=re.compile("elsie"))
  2. # [Elsie]
复制代码


传入 列表时,将查找所有包含列表中元素的Tag
  1. soup.find_all(['th','td'])
  2. [鱼C信息表, 姓名, 年龄, 颜值, 不二如是:, 18, 下一位更帅~, 小甲鱼老湿:, 28, 下一位更帅~, MSK:, 16, 第一位最帅~, 村里有个姑娘叫小花~]
复制代码


传入 True时,我不会解释,你自己看:
  1. soup.find_all(id=True)
  2. [姓名, 年龄, 颜值]
复制代码

将所有具有id属性的Tag查找了出来


text参数
通过 text 参数可以搜搜文档中的字符串内容.与 name 参数的可选值一样, text 参数接受 字符串 , 正则表达式 , 列表, True
  1. soup.find_all(text='下一位更帅~')
  2. #['下一位更帅~', '下一位更帅~']
  3. soup.find_all(text=re.compile('帅'))
  4. #['下一位更帅~', '下一位更帅~', '第一位最帅~']
  5. soup.find_all(text=True)
  6. #['\n', '\n', '鱼C信息', '\n', '\n', '鱼C信息表', '\n', '\n', '\n', '姓名', '\n', '年龄', '\n', '颜值', '\n', '\n', '\n', '\n', '\n', '不二如是:', '\n', '18', '\n', '下一位更帅~', '\n', '\n', '\n', '小甲鱼老湿:', '\n', '28', '\n', '下一位更帅~', '\n', '\n', '\n', 'MSK:', '\n', '16', '\n', '第一位最帅~', '\n', '\n', '\n', '村里有个姑娘叫小花~', '\n', '\n', '\n']
复制代码



limit 参数
限制返回个数

recursive 参数
指定为True时,搜索范围是子孙节点,如果设为False,只搜索子节点








find的参数和用法和find_all一样,但是最多只返回一个结果

你可能感兴趣的:([学习笔记] python爬虫进阶BeautifulSoup 超详细的find_all()和find)