(二)bs4模块学习

简介

Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。BeautifulSoup会帮你节省数小时甚至数天的工作时间。

美丽的汤(靓汤)将复杂的HTML文档转换成一个复杂的树形结构,每个节点都是Python的对象,所有对象可以归纳为4种: Tag,NavigableString,BeautifulSoup,Comment。

取出标签及其里面的内容

### Tag标签
from bs4 import BeautifulSoup

file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
print(bs.title)
from bs4 import BeautifulSoup

file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
print(bs.head)  #这里的head指的是head标签,此时会打印出head标签中的所有内容
print(type(bs.head))

在这里插入图片描述
注意:

这里默认只能取出匹配到的遇到的第一个标签的内容。

只取出标签里面的内容(字符串)

from bs4 import BeautifulSoup

file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
print(bs.title.string) #只取出标签里面的内容
print(type(bs.title.string))

在这里插入图片描述

拿到标签里的属性值(以字典的形式保存)

file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
print(bs.a.attrs) #以字典的形式取出标签里的属性值

在这里插入图片描述
源文件
在这里插入图片描述

取出文件自身(Beautifulsop表示整个文档)

file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
#print(bs.a.attrs) #以字典的形式取出标签里的属性值
# print(type(bs.title.string))
print(type(bs))

在这里插入图片描述

file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
#print(bs.a.attrs) #以字典的形式取出标签里的属性值
# print(type(bs.title.string))
print(bs)

在这里插入图片描述
还可以print bs.name 等属性

输出的内容不包含注释符号

file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
#print(bs.a.attrs) #以字典的形式取出标签里的属性值
# print(type(bs.title.string))
#print(bs)
print(bs.a.string)
print(type(bs.a.string)) #comment是一个特殊的navigablestring,输出的内容不包含注释符号

在这里插入图片描述

在这里插入图片描述

应用

文档 的遍历

from bs4 import BeautifulSoup

file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
#print(bs.a.attrs) #以字典的形式取出标签里的属性值
# print(type(bs.title.string))
#print(bs)
# 遍历文件树中的遍历文档
print(bs.head.contents) #以列表的形式将head标签中的内容存储并打印出来
print(bs.head.contents[1]) #取出列表的第二个元素

在这里插入图片描述

文档的搜索

find_all

字符串过滤,会查找与字符串完全匹配的内容
from bs4 import BeautifulSoup

file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
#print(bs.a.attrs) #以字典的形式取出标签里的属性值
# print(type(bs.title.string))
#print(bs)
# 遍历文件树中的遍历文档
# print(bs.head.contents) #以列表的形式将head标签中的内容存储并打印出来
# print(bs.head.contents[1]) #取出列表的第二个元素
t_list=bs.find_all("a")
print(t_list)

在这里插入图片描述

正则表达式搜索(使用search()方法来匹配
from bs4 import BeautifulSoup
import re #正则表达式的模块
file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
t_list=bs.find_all(re.compile("a")) #打印出含有a的所有内容+标签
print(t_list)

在这里插入图片描述

传入一个函数(方法),根据函数的要求来搜索
from bs4 import BeautifulSoup
import re
file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
def name_is_exists(tag):
    return tag.has_attr("name") #把标签中含有name属性的标签加内容返回出来
t_list = bs.find_all(name_is_exists)
print(t_list)

在这里插入图片描述

for item in t_list:
    print(item)

在这里插入图片描述

kwargs参数
from bs4 import BeautifulSoup
import re
file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
def name_is_exists(tag):
    return tag.has_attr("name") #把标签中含有name属性的标签加内容返回出来
t_list = bs.find_all(name_is_exists)
t_list=bs.find_all(id='head') # 之前匹配的都是规则,现在匹配关键字
for item in t_list:
    print(item)

在这里插入图片描述

from bs4 import BeautifulSoup
import re
file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
def name_is_exists(tag):
    return tag.has_attr("name") #把标签中含有name属性的标签加内容返回出来
t_list = bs.find_all(name_is_exists)
t_list=bs.find_all(class_=True) # 之前匹配的都是规则,现在匹配关键字
for item in t_list:
    print(item)

在这里插入图片描述

text参数
from bs4 import BeautifulSoup
import re
file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
# def name_is_exists(tag):
#     return tag.has_attr("name") #把标签中含有name属性的标签加内容返回出来

t_list = bs.find_all(text=["hao123",'地图','贴吧'])
for item in t_list:
    print(item)

在这里插入图片描述

应用正则表达式来查找包含特定文本的内容

from bs4 import BeautifulSoup
import re
file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
# def name_is_exists(tag):
#     return tag.has_attr("name") #把标签中含有name属性的标签加内容返回出来
t_list = bs.find_all(text=re.compile("\d")) #正则表达式匹配含有数字的字符串
for item in t_list:
    print(item)

在这里插入图片描述

limit参数

from bs4 import BeautifulSoup
import re
file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
# def name_is_exists(tag):
#     return tag.has_attr("name") #把标签中含有name属性的标签加内容返回出来
t_list = bs.find_all("a",limit=3) #只显示出3个a
for item in t_list:
    print(item)

在这里插入图片描述

css选择器

from bs4 import BeautifulSoup
import re
file=open("./baidu.html","rb") #以读二进制的形式打开file
html1=file.read()
bs=BeautifulSoup(html1,"html.parser")
# def name_is_exists(tag):
#     return tag.has_attr("name") #把标签中含有name属性的标签加内容返回出来
t_list=bs.select('title') #指定标签来匹配
t_list1=bs.select(".mnav") #通过类名来查找
t_list2=bs.select("#u1") #通过id来查找



for item in t_list:
    print(item)
for item in t_list1:
    print(item)

在这里插入图片描述

t_list=bs.select(“a[class=‘bri’]”) #通过属性来查找
在这里插入图片描述

t_list=bs.select(“head > title”) #通过子标签来查找

在这里插入图片描述
t_list=bs.select(".mnav~.bri") #通过兄弟节点来查找,查找和mnav是兄弟的标签

在这里插入图片描述

t_list=bs.select(".mnav~.bri") #通过兄弟节点来查找,查找和mnav是兄弟的标签
print(t_list[0].get_text()) #拿到文本

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值