python bs4 find_all_beautifulsoup4 bs4 find_all & find 函数解析

假定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参数

a = '''

段落1

段落2

文章

'''

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

soup.find_all('p', text='文章')

soup.find_all('p', text=['段落1','段落2'])

# 正则表达式

import re

soup.find_all('p', text=re.compile('段落'))

soup.find_all('p',text=True)

# 传入函数

def nothing(c):

return c not in ['段落1','段落2','文章']

soup.find_all('p',text=nothing)

# 同上

def nothing(c):

return c is None

soup.find_all('p',text=nothing)

根据位置识别

找到 第i个a标签

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

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

使用方法

后缀函数

.name : 标签类型

.attr :标签所有属性的字典find特征查找非常方便

.has :检查标签是否有某属性 True、False   # 没什么用

a = '''

段落1

'''

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

for i in soup.body.find_all(True):

print(i.name) # 提取标签名

print(i.attrs) # 提取标签所有属性值

print(i.has_attr('href')) # 检查标签是否有某属性

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值