2021-05-25

Beautifulsoup拓展
一、BeautifulSoup4将复杂HTML文档转换为复杂的树形结构,每个节点都是Python对象
所有对象可以归纳为Tag、NavigableString、BeautifulSoup、Comment四类
1、Tag 标签
以百度首页为例

from bs4 import BeautifulSoup

file = open("./Baidu.html","rb")   #readbits,二进制读取
html = file.read()
bs = BeautifulSoup(html,"html.parser")   #解析

print(bs.title)

模拟从网页爬取后将内容获取到内存的数据文件
打印标题
在这里插入图片描述
可以利用 soup 加标签名轻松地获取这些标签的内容,这些对象的类型是bs4.element.Tag。但是它查找的是在所有内容中的第一个符合要求的标签
所以这个命令的目的就是找到第一个相关标签及内容并打印出来
另外,Tag有两个重要的属性,是 name 和 attrs

from bs4 import BeautifulSoup 
file = open('./aa.html', 'rb') 
html = file.read() 
bs = BeautifulSoup(html,"html.parser") 
# [document] #bs 对象本身比较特殊,它的 name 即为 [document] print(bs.name) 
# head #对于其他内部标签,输出的值便为标签本身的名称 print(bs.head.name) 
# 在这里,我们把 a 标签的所有属性打印输出了出来,得到的类型是一个字典
print(bs.a.attrs) #还可以利用get方法,传入属性的名称,二者是等价的
print(bs.a['class']) 
# 等价 bs.a.get('class') 
# 可以对这些属性和内容等等进行修改 
bs.a['class'] = "newClass" 
print(bs.a) # 还可以对这个属性进行删除 del bs.a['class'] 
print(bs.a)

2、NavigableString 字符串(内容)
如果只想要内容

print(bs.title.string)

在这里插入图片描述

通过attrs的方式拿到标签的属性,以字典形式表示,内容都是键值对

print(bs.a.attrs)

在这里插入图片描述
3、BeautifulSoup
对象表示的是一个文档的内容。可以当作Tag对象,是一个特殊Tag,可以获取其类型、名称和属性

from bs4 import BeautifulSoup 
file = open('./aa.html', 'rb') 
html = file.read() 
bs = BeautifulSoup(html,"html.parser") 
print(type(bs.name)) 
print(bs.name) print(bs.attrs)

在这里插入图片描述
是去掉嵌套格式的整个文档
4、Comment
Comment 对象是一个特殊类型的NavigableString 对象,其输出的内容不包括注释符号

from bs4 import BeautifulSoup 
file = open('./aa.html', 'rb') 
html = file.read() 
bs = BeautifulSoup(html,"html.parser") 
print(bs.a) # 此时不能出现空格和换行符,a标签如下: 
# <a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新闻--></a> print(bs.a.string) # 新闻 
print(type(bs.a.string)) # <class 'bs4.element.Comment'>

二、遍历文档树
contents:获取Tag的所有子节点,返回一个list

# tag的.content 属性可以将tag的子节点以列表的方式输出 print(bs.head.contents) 
# 用列表索引来获取它的某一个元素 print(bs.head.contents[1])

children:获取Tag的所有子节点,返回一个生成器

for child in bs.body.children: 
print(child)

descendants:获取Tag的所有子孙节点
strings:如果Tag包含多个字符串,即在子孙节点中有内容,可以用此获取,而后进行遍历
stripped_strings:与strings用法一致,只不过可以去除掉那些多余的空白内容
parent:获取Tag的父节点
parents:递归得到父辈元素的所有节点,返回一个生成器
previous_sibling:获取当前Tag的上一个节点,属性通常是字符串或空白,真实结果是当前标签与上一个标签之间的顿号和换行符
next_sibling:获取当前Tag的下一个节点,属性通常是字符串或空白,真是结果是当前标签与下一个标签之间的顿号与换行符
previous_siblings:获取当前Tag的上面所有的兄弟节点,返回一个生成器
next_siblings:获取当前Tag的下面所有的兄弟节点,返回一个生成器
previous_element:获取解析过程中上一个被解析的对象(字符串或tag),可能与previous_sibling相同,但通常是不一样的
next_element:获取解析过程中下一个被解析的对象(字符串或tag),可能与next_sibling相同,但通常是不一样的
previous_elements:返回一个生成器,可以向前访问文档的解析内容
next_elements:返回一个生成器,可以向后访问文档的解析内容
has_attr:判断Tag是否包含属性

使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值