当前位置:   article > 正文

Python中bs4的soup.find()和soup.find_all()用法_soup.find().txt

soup.find().txt

前言

在Python中,BeautifulSoup(通常通过bs4库引入)是一个用于解析HTML和XML文档的库。它提供了许多方法和功能,其中soup.find()soup.find_all()是两个最常用的方法,用于从解析的文档树中查找元素。

一、背景
我们在使用python对网页爬虫的时候,经常会得到一些html数据,因此我们就会利用soup.find()和soup.find_all()方法来筛选出想要的数据。

二、用法
1.soup.find()
 1.1利用name来查找
代码如下:

  1. from bs4 import BeautifulSoup
  2.  
  3. html_string = """<div>
  4.     <h1 class="item" id="x1">蔡x坤</h1>
  5.     <ul class="item" id="x2">
  6.         <li>唱</li>
  7.         <li>跳</li>
  8.         <li>rap</li>
  9.         <li>篮球</li>
  10.     </ul>
  11.     <div class="item "id='x3'>
  12.         <span>你干嘛</span>
  13.         <a href="www.xxx.com" class='info'>ikun.com</a>
  14.     </div>
  15. </div>"""
  16.  
  17. soup = BeautifulSoup(html_string, features="html.parser")
  18.  
  19. #利用name来查找
  20. tag_list=soup.find(name="h1")
  21. print(tag_list)
  22.  结果如下:
  23. <h1 class="item" id="x1">蔡x坤</h1>

1.2利用属性attrs来寻找
代码如下:

  1. html_string = """<div>
  2.     <h1 class="item" id="x1">蔡x坤</h1>
  3.     <ul class="item" id="x2">
  4.         <li>唱</li>
  5.         <li>跳</li>
  6.         <li>rap</li>
  7.         <li>篮球</li>
  8.     </ul>
  9.     <div class="item "id='x3'>
  10.         <span>你干嘛</span>
  11.         <a href="www.xxx.com" class='info'>ikun.com</a>
  12.     </div>
  13. </div>"""
  14.  
  15. soup = BeautifulSoup(html_string, features="html.parser")
  16. #利用属性attrs查找
  17. tag_list=soup.find(attrs={"id":"x3"})
  18. print(tag_list)
  19. 结果如下:
  20.  <div class="item" id="x3">
  21. <span>你干嘛</span>
  22. <a class="info" href="www.xxx.com">ikun.com</a>
  23. </div>

1.3利用name和attrs寻找 
代码如下:

  1. html_string = """<div>
  2.     <h1 class="item" id="x1">蔡x坤</h1>
  3.     <ul class="item" id="x1">我是一名练习生</ul>
  4.     <ul class="item" id="x2">
  5.         <li>唱</li>
  6.         <li>跳</li>
  7.         <li>rap</li>
  8.         <li>篮球</li>
  9.     </ul>
  10.     <div class="item "id='x3'>
  11.         <span>你干嘛</span>
  12.         <a href="www.xxx.com" class='info'>ikun.com</a>
  13.     </div>
  14. </div>"""
  15.  
  16. soup = BeautifulSoup(html_string, features="html.parser")
  17. #利用name和attrs寻找
  18. tag_list=soup.find(name="ul",attrs={"id":"x2"})
  19. print(tag_list)
  20. 结果如下:
  21.  <ul class="item" id="x2">
  22. <li>唱</li>
  23. <li>跳</li>
  24. <li>rap</li>
  25. <li>篮球</li>
  26. </ul>

2.soup.find_all()
2.1利用name找多个
代码如下:

  1. html_string = """<div>
  2.     <h1 class="item" id="x1">蔡x坤</h1>
  3.     <ul class="item" id="x1">我是一名练习生</ul>
  4.     <ul class="item" id="x2">
  5.         <li>唱</li>
  6.         <li>跳</li>
  7.         <li>rap</li>
  8.         <li>篮球</li>
  9.     </ul>
  10.     <div class="item "id='x3'>
  11.         <span>你干嘛</span>
  12.         <a href="www.xxx.com" class='info'>ikun.com</a>
  13.     </div>
  14. </div>"""
  15.  
  16. soup = BeautifulSoup(html_string, features="html.parser")
  17. #利用name找多个
  18. tag_list=soup.find_all(name="li")
  19. for tag in tag_list:
  20.     print(tag.name,tag.text)
  21. 结果如下:(输出name和text)
  22. li 唱
  23. li 跳
  24. li rap
  25. li 篮球

2.2利用attrs找多个
代码如下:

  1. from bs4 import BeautifulSoup
  2.  
  3. html_string = """<div>
  4.     <h1 class="item" id="x1">蔡x坤</h1>
  5.     <ul class="item" id="x1">我是一名练习生</ul>
  6.     <ul class="item" id="x2">
  7.         <li>唱</li>
  8.         <li>跳</li>
  9.         <li>rap</li>
  10.         <li>篮球</li>
  11.     </ul>
  12. </div>"""
  13.  
  14. soup = BeautifulSoup(html_string, features="html.parser")
  15.  
  16. #用attrs找多个
  17. tag_list=soup.find_all(attrs={"class":"item"})
  18. for tag in tag_list:
  19.     print(tag.name,tag.text)
  20. 结果如下:(输出name和text) 
  21. h1 蔡x坤
  22. ul 我是一名练习生
  23. ul 
  24. rap
  25. 篮球

2.3利用recursive判断是否递归寻找,默认为True
代码如下:(recursive=False    只找儿子)

  1. from bs4 import BeautifulSoup
  2.  
  3. html_string = """<div>
  4.     <div id='x1'>
  5.         <span>你干嘛</span>
  6.         <a href="www.xxx.com" class='info'>ikun.com</a>
  7.         <div>
  8.             <span>这是一句话</span>
  9.                 <span>这是一句话的一句话</span>
  10.             <span>这也是一句话</span>
  11.         </div>
  12.     </div>
  13. </div>"""
  14.  
  15. soup = BeautifulSoup(html_string, features="html.parser")
  16.  
  17. #找儿子
  18. tag_list1=soup.find(attrs={"id":"x1"})
  19. for tag in tag_list1.find_all(recursive=False):
  20.     print(tag)
  21. 结果如下(recursive=False    只找儿子):
  22. <span>你干嘛</span>
  23. <a class="info" href="www.xxx.com">ikun.com</a>
  24. <div>
  25. <span>这是一句话</span>
  26. <span>这是一句话的一句话</span>
  27. <span>这也是一句话</span>
  28. </div>
  29. 代码如下:(recursive=True    找子子孙孙) 
  30. from bs4 import BeautifulSoup
  31.  
  32. html_string = """<div>
  33.     <div id='x1'>
  34.         <span>你干嘛</span>
  35.         <a href="www.xxx.com" class='info'>ikun.com</a>
  36.         <div>
  37.             <span>这是一句话</span>
  38.                 <span>这是一句话的一句话</span>
  39.             <span>这也是一句话</span>
  40.         </div>
  41.     </div>
  42. </div>"""
  43.  
  44. soup = BeautifulSoup(html_string, features="html.parser")
  45.  
  46. #找子子孙孙
  47. tag_list1=soup.find(attrs={"id":"x1"})
  48. for tag in tag_list1.find_all(recursive=True):
  49.     print(tag)
  50. 结果如下(recursive=True    找子子孙孙):
  51. <span>你干嘛</span>
  52. <a class="info" href="www.xxx.com">ikun.com</a>
  53. <div>
  54. <span>这是一句话</span>
  55. <span>这是一句话的一句话</span>
  56. <span>这也是一句话</span>
  57. </div>
  58. <span>这是一句话</span>
  59. <span>这是一句话的一句话</span>
  60. <span>这也是一句话</span>
  61. ————————————————
  62.                     

三、案例 
爬取易车网的车品牌为例子(本例子参考python讲师武沛齐老师)

1.分析网页
用chrome的无痕网页打开https://car.yiche.com/并分析网页

分析发现车牌的名字在 name="div", attrs={"class": "item-brand"}里面

2.模拟请求,获取HTML文本

  1. import requests
  2. from bs4 import BeautifulSoup
  3.  


# 获取HTML文本

  1. res = requests.get(
  2.     url="https://car.yiche.com/"
  3. )


3.筛选数据

  1. import requests
  2. from bs4 import BeautifulSoup
  3.  

soup = BeautifulSoup(res.text, features="html.parser")


 
#创一个列表存

result_list=[]'
运行


 
#筛选数据

  1. tag_list = soup.find_all(name="div", attrs={"class": "item-brand"})
  2. for tag in tag_list:
  3.     result_list.append(tag.attrs["data-name"])
  4. print(result_list)


————————————————

    总结

  • soup.find():在解析的HTML/XML文档树中查找第一个匹配的元素,并返回它。如果没有找到,返回None
  • soup.find_all():在解析的HTML/XML文档树中查找所有匹配的元素,并返回一个包含它们的列表。如果没有找到,返回一个空列表。

这两个方法都接受类似的参数,如标签名、属性、CSS选择器等,用于指定要查找的元素。使用这些参数,您可以精确地控制从HTML/XML文档中提取哪些信息。

                      

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/1005451
推荐阅读
相关标签
  

闽ICP备14008679号