程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

beautifulsoup4 bs4 find_all & find 函数解析

发布于2019-08-20 13:41     阅读(879)     评论(0)     点赞(12)     收藏(0)


假定soup是我们下载下来的网页的对象了

soup = BeautifulSoup(a, "html.parser")

# 第一种,直接将属性名作为参数名,但是有些属性不行,比如像a-b这样的属性
soup.find_all('p', id = 'p1') # 一般情况
soup.find_all('p', class_='p3') # class是保留字比较特殊,需要后面加一个_

# 最通用的方法
soup.find_all('p', attrs={'class':'p3'}) # 包含这个属性就算,而不是只有这个属性
soup.find_all('p', attrs={'class':'p3','id':'pp'}) # 使用多个属性匹配
soup.find_all('p', attrs={'class':'p3','id':False}) # 指定不能有某个属性
soup.find_all('p', attrs={'id':['p1','p2']}) # 属性值是p1或p2

# 正则表达式匹配
import re
soup.find_all('p', attrs={'id':re.compile('^p')}) # 使用正则表达式
soup.find_all('p', attrs={'class':True}) # 含有class属性即可

 

根据标签内内容来识别

这部分还是使用find_all函数,增加text参数

  1. a = '''
  2. <p id='p1'>段落1</p>
  3. <p class='p3'>段落2</p>
  4. <p class='p3'>文章</p>
  5. <p></p>
  6. '''
  7. soup = BeautifulSoup(a, "html.parser")
  8. soup.find_all('p', text='文章')
  9. soup.find_all('p', text=['段落1','段落2'])
  10. # 正则表达式
  11. import re
  12. soup.find_all('p', text=re.compile('段落'))
  13. soup.find_all('p',text=True)
  14. # 传入函数
  15. def nothing(c):
  16. return c not in ['段落1','段落2','文章']
  17. soup.find_all('p',text=nothing)
  18. # 同上
  19. def nothing(c):
  20. return c is None
  21. soup.find_all('p',text=nothing)

根据位置识别

  • 找到 第i个a标签
  • 找到 第i个和第j个a标签

有时三个标签的标签属性全都一样,所有东西都一样(内容可能不一样,但是类型是一样的),但是我们只想要第二个,这时就不能只通过标签属性内容这些方法提取了,可能它的位置是特殊的就可以用位置来提取。这里其实可以用find_all提取出列表,然后在列表中根据位置再提取一次

 

使用方法

后缀函数

  • .name : 标签类型
  • .attr :标签所有属性的字典 find特征查找非常方便
  • .has :检查标签是否有某属性 True、False   # 没什么用
  1. a = '''
  2. <body>
  3. <h><a href='www.biaoti.com'>标题</a></h>
  4. <p>段落1</p>
  5. <p></p>
  6. </body>
  7. '''
  8. soup = BeautifulSoup(a, 'html.parser')
  9. for i in soup.body.find_all(True):
  10. print(i.name) # 提取标签名
  11. print(i.attrs) # 提取标签所有属性值
  12. print(i.has_attr('href')) # 检查标签是否有某属性


所属网站分类: 技术文章 > 博客

作者:天下

链接:https://www.pythonheidong.com/blog/article/49373/0427c8ababf553e0105a/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

12 0
收藏该文
已收藏

评论内容:(最多支持255个字符)