实训5python之for循环i_Python实训day5

'''

搜索文档树:

是bs4中最强大的功能之一~

soup = BeautifulSoup(解析文本, 解析器)

- soup.find(解析器规则):

根据过滤器查找到解析文本中的"第一个"想要获取的节点。

- soup.find_all(解析器规则):

根据过滤器查找到解析文本中的 "所有" 想要获取的节点。

- soup.find(name, attrs, text) 或 find_all() 内的参数:

- name(标签名): 根据标签的名字查找到想要获取的标签。

- attrs(属性): 根据标签的属性查找到想要获取的标签。

- text(文本): 根据标签的文本查找到想要获取的标签。

注意: 可以根据参数的规律获取想要找的节点标签。

- name,attrs,text中可以使用的过滤器:

- 字符串过滤器

name='字符串', attrs={"字符串": "字符串"}, text="字符串"

- 正则过滤器

import re

name=re.findall(), attrs={"字符串": re.findall()}, text=re.findall()

- 列表过滤器

name=[], attrs={"字符串": []}, text=[]

- bool过滤器

# 获取一个有id并且有文本的p标签

name='p', attrs={"id": True}, text=True

- 方法过滤器

将需要过滤的标签当做参数传入函数中,进行判断,获取想要的节点。

'''

# 解析文本

html_doc = """

The Dormouse's story

$37

Once upon a time there were three little sisters; and their names were

Elsie,

Lacie and

Tillie;

and they lived at the bottom of a well.

...

"""

frombs4 importBeautifulSoup

soup = BeautifulSoup(html_doc, 'lxml')

print(soup)

# find()

# 查找html_doc文本中第一个b标签

# print('解析后的结果: ', soup.find(name='b', text='$37'))

# print('解析后的结果: ', soup.find(name='a', attrs={"id": "link2"}))

# find_all()

# 获取所有的a标签

# print(soup.find_all(name='a'))

print('='* 150)

# - 字符串过滤器

# 1) 查找id为link3的a标签

print(soup.find(name='a', attrs={'id': 'link3'}))

print('='* 150)

# 2) 查找class为sister,文本为Elsie的a标签

# Elsie

print(soup.find(name='a', attrs={"class": 'sister'}, text='Elsie'))

print('='* 150)

# 3) 找一个class为story的p标签

print(soup.find(name='p', attrs={'class': 'story'}))

print('='* 150)

# - 正则过滤器

importre

# re.compile('正则表达式') --> 得到一个正则对象,可以配合find方法来使用

# \d+: 匹配有数字的内容

# 1) 查找文本中有数字的标签b标签

print(soup.find(name='b', text=re.compile('\d+')))

print('='* 150)

# 2) 查找所有id中包含数字的标签

print(soup.find_all(attrs={"id": re.compile('\d+')}))

print('='* 150)

# - 列表过滤器

# 1)获取"所有"的a与p标签

print(soup.find_all(name=['a', 'p']))

print('='* 150)

# - bool过滤器

# 1) 获取所有有class属性并且有文本的标签

print(soup.find_all(attrs={'class': True}, text=True))

print('='* 150)

# - 方法过滤器:

# 将需要过滤的标签当做参数传入函数中,进行判断,获取想要的节点。

# 函数:

defhas_id_not_class(tag):

'''

用于接收所有的标签,判断标签内是否只有class

没有id的,并将该标签返回。

:paramtag:

:return:

'''

iftag.has_attr('class') and nottag.has_attr('id'):

returntag

# 1) 搜索只有class 没有id 的标签

# print(soup.find_all(name=函数名))

print(soup.find_all(name=has_id_not_class))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值