目录
- 前言
- 根据标签和属性识别
- 根据标签内内容来识别
- 提取内容
- 查看标签信息
- 多层嵌套标签
- BeautifulSoup示例:
- CSS选择器的示例:
- 其他:
前言
BeautifulSoup库是python中常用的的网页解析库,灵活,高效,支持多种解析器。可以很方便地实现网页信息的提取。
根据标签和属性识别
# 获取id=d1的div标签
soup.find('div', id = 'd1')
# 获取class=d1的所有div标签
soup.find_all('div', class_ = 'd1')
# 最通用的方法
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属性即可
根据标签内内容来识别
a = '''
<p id='p1'>段落1</p>
<p class='p3'>段落2</p>
<p class='p3'>文章</p>
<p></p>
'''
soup = BeautifulSoup(a, "")
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)
提取内容
- 提取标签内容:使用.text
- 提取标签属性值,像字典一样提取
a = '''
<body>
<h><a href=''>标题</a></h>
<p>段落1</p>
<p>段落2</p>
</body>
'''
soup = BeautifulSoup(a, '')
# 提取内容
soup.p.text
for p in soup.find_all('p'):
print(p.text)
soup.h.text # 多层嵌套也可以直接返回
soup.h.a.text # 也可以这样
soup.body.text # 里面有多个内容时 '\n标题\n段落1\n段落2\n'
# 提取属性值,像字典一样提取,以下两种方法等价
soup.h.a['href']
soup.h.a.get('href')
查看标签信息
- 获得标签名
- 获得标签所有属性的字典
- 检查标签是否有某属性
a = '''
<body>
<h><a href=''>标题</a></h>
<p>段落1</p>
<p></p>
</body>
'''
soup = BeautifulSoup(a, '')
for i in soup.body.find_all(True):
print(i.name) # 提取标签名
print(i.attrs) # 提取标签所有属性值
print(i.has_attr('href')) # 检查标签是否有某属性
多层嵌套标签
a = '''
<span>
<span id='s'>内容1</span>
</span>
<span>内容2</span>
'''
soup = BeautifulSoup(a, '')
# 多层嵌套标签
soup.find_all('span')
# find_all的其他参数
soup.find_all('span', limit=2) # 限制只返回前两个
soup.find_all('span', recursive=False) # 只查找子节点,不查找孙节点
BeautifulSoup示例:
from bs4 import BeautifulSoup
import requests
url = ""
r = requests.get(url)
# 解析HTML内容
soup = BeautifulSoup(r.content, '')
# 查找页面中的所有的a标签,并打印出连接地址
links = soup.find_all('a')
for link in links:
print(link.get('href'))
这个示例演示了如何使用BeautifulSoup从一个网站上提取所有链接。首先,使用Python库requests向该网站发出请求,然后使用BeautifulSoup解析HTML内容。最后,使用find_all()方法查找HTML中的所有链接,并打印它们的href属性。
BeautifulSoup还提供了许多其他方法,包括find()和find_all(),这些方法可以通过标签、类、ID等来搜索HTML内容。另外,BeautifulSoup还支持CSS选择器,可以使用select()方法来使用CSS选择器查找HTML内容。
CSS选择器的示例:
from bs4 import BeautifulSoup
import requests
url = ""
r = requests.get(url)
soup = BeautifulSoup(r.content, '')
links = soup.select('')
for link in links:
print(link.get('href'))
这个示例演示了如何使用CSS选择器查找所有class为"link"的链接。在select()方法中,我们使用CSS选择器""来查找所有带有class="link"的标签。
其他:
BeautifulSoup(a, "")
这里的第二个参数表示使用的解析器,BeautifulSoup
提供了三个解析器,它们各自的优缺点如下
内置不依赖扩展,容错能力强,速度适中
lxml
速度最快,容错能力强,但是依赖C扩展html5hib
速度最慢,容错能力最强,依赖扩展
- ????博客主页:/qq233325332
- ????欢迎点赞 ???? 收藏 ⭐留言 ???? 如有错误敬请指正!
- ????本文由 陌北v1 原创,首发于 ****博客????
- ????停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨