第三方库:Beautiful soup模块

一 Beautiful Soup

1.定义

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。

2.Beautiful Soup的使用

安装:

pip install bs4

如何使用
将一段文档传入BeautifulSoup 的构造方法,就能得到一个文档的对象, 可以传入一段字符串或一个文件句柄

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
</head>
<body>
<p style="color: #aaffaa" class="class1" id="one">Python最强</p>
<p id="one1">Java最强</p>
<div>hello</div>
</body>
</html>

快速使用:

from bs4 import BeautifulSoup

soup = BeautifulSoup(open("hello.html"),'html5lib')
print(soup)
soup1 = BeautifulSoup('<b class="boldest">Extremely bold</b>','html5lib')
print(soup1)

在这里插入图片描述

3.对象的种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag 、NavigableString 、 BeautifulSoup 、Comment
Tag: 标签对象
NavigableString : 字符内容操作对象
BeautifulSoup: 文档对象
Comment:是一个特殊类型的 NavigableString 对象

4.获取标签的内容
from bs4 import BeautifulSoup
#构造对象
soup = BeautifulSoup(open('hello.html'), 'html.parser')
#获取标签, 默认获取找到的第一个符合的内容
print(soup.title)
print(type(soup.title))
print(soup.p)

在这里插入图片描述

5.获取标签的属性
print(soup.p.attrs)
#获取标签指定属性的内容
print(soup.p['id'])
print(soup.p['class'])
print(soup.p['style'])

在这里插入图片描述
对属性进行修改

soup.p['id'] = 'modifyid'
print(soup.p)
print(type(soup.p))
6.获取标签的文本内容
print(soup.title.text)
print(soup.title.string)
print(soup.title.name)
print(soup.head.title.string)

在这里插入图片描述

7.操纵子节点

一个Tag可能包含多个字符串或其它的Tag,这些都是这个Tag的子节点。Beautiful Soup提供了许多操作和遍历子节点的属性

print(soup.head.contents)
print(soup.head.children)
for el in soup.head.children:
    print(el)

在这里插入图片描述

二 面向对象的匹配

在westos.html中可以随便写点内容

from bs4 import BeautifulSoup
import re
#构造对象
soup = BeautifulSoup(open('westos.html'), 'html.parser')
#查找指定的标签内容
res=soup.p
print(res)

#这样查找的结果就是,只会查找到第一个符合条件的,并不能找到所有符合条件的,这是就要用到 find_all 方法了
res1 = soup.find_all('p')
print(res1)

#与正则表达式的结合使用,首先对于正则表达式进行编译,这样可以提高查找速率
pattern = r'd.+'
pattern = re.compile(pattern)
print(re.findall(pattern, 'this is a dog,only a dog'))

#通过 re 的函数 compile 可以将规则进行编译,这样来提高效率将正则与soup相结合
res1 = soup.find_all(re.compile(r'd+'))
print(res1)

#详细查找标签
print(soup.find_all('p', id='one'))
print(soup.find_all('p', id=re.compile(r'one\d{1}')))
print(soup.find_all('p', class_="class1"))
print(soup.find_all('p', class_=re.compile(r'class\d{1}')))

#查找多个标签
print(soup.find_all(['p', 'div']))
print(soup.find_all([re.compile('^d'), re.compile('p')]))

#内容的匹配
print(soup.find_all(text='第一章'))
print(soup.find_all(text=re.compile('第一章')))
print(soup.find_all(text=[re.compile('第一章'), 'Title']))

三 CSS的匹配

# 标签选择器(div)
res1 = soup.select("p")
print(res1)
# 类选择器(.class1)
res2 = soup.select(".class1")
print(res2)
# id选择器(#idname)
res3 = soup.select("#one1")
print(res3)
#  属性选择器(p[type="text"]
print(soup.select("p[id='one1']"))
print(soup.select("p['class']"))

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值