昨天我先“伪装”成了浏览器对网页进行了访问,爬取到了网页的信息。那么接下来的一步就是对爬取到的信息进行解析,获取到我们想要的信息。这个时候我们就需要引入一个库叫做靓汤,也就是BeautifulSoup4,通过这个库里面的一些函数可以将我们的网页文件解析成我们想要信息的形式。
目录
一、BeautifulSoup4简介
BeautifulSoup4将复杂的HTML文档转换成一个复杂的树形结构,每个节点都是一个Python对象,所有对象可以归纳为4种:
- Tag 标签
- NavigableString 标签内的内容(字符串等等)
- BeautifulSoup 整个文档
- Comment 注释掉的类型
这个时候又要用到前端的一些知识,刚好也是我前段时间一直在学习的东西,就是HTML和CSS,思路就是把HTML文件抓换成一个bs对象,然后通过HTML中的标签将想要的信息提取出来。
1.Tag 标签
当我们将一个HTML文件解析成一个BeautifulSoup对象之后,可以直接使用HTML中的标签对其进行提取,前段时间学习的标签有title、div、span等等,我们可以直接进行打印标签及其内部的内容!代码和运行截图如下。
(1)代码
# 引入包
from bs4 import BeautifulSoup
# 打开一个html文件,并利用BeautifulSoup解析
file = open("./test.html", "rb")
html = file.read()
bs = BeautifulSoup(html, "html.parser")
# Tag 提取出整个标签
print(bs.title)
print(bs.h1)
print(bs.p)
(2)运行截图
这样可以提取出整个标签中的内容,包括标签以及内部的
2.NavigableString 标签内的内容
这种可以提取出标签中的内容,或者标签中一些属性的值。
(1)代码
# 引入包
from bs4 import BeautifulSoup
# 打开一个html文件,并利用BeautifulSoup解析
file = open("./test.html", "rb")
html = file.read()
bs = BeautifulSoup(html, "html.parser")
# NavigableString 标签内的内容(字符串等等)
print(bs.title.string)
print(bs.h1.string)
print(bs.p.string)
(2)运行截图
这样就只能提取出标签中的内容
3.BeautifulSoup 整个文档
代表整个文档
4.Comment 注释掉的类型
如果我们的标签中有注释掉的内容,在提取的时候会自动忽略掉省略符号。
二、文档的遍历与搜索
当提取文件中的数据的时候,我们往往用到两种方法:遍历和搜索。遍历用的比较少,毕竟我们爬取的数据一般数据量都很大,所以多使用搜索。
搜索又包括以下几种方法,find_all()函数、通过参数、css选择器等等都可以实现数据的“定位”。
# 文档的遍历(了解)
print(bs.head.contents)
print(bs.head.contents[1])
# 文档的搜索(更多使用搜索)
# 1、find_all()
# 字符串过滤:会查找与字符串完全匹配的内容
t_list = bs.find_all("h1")
print(t_list)
for h1 in t_list:
print(h1.string)
# 正则表达式搜索:使用search()方法来匹配内容
import re
t_list = bs.find_all(re.compile("h"))
print(t_list)
# 方法:传入一个函数(方法),根据函数的要求来搜索(了解)
def name_is_exists(tag):
return tag.has_attr("name") # 搜索有name标签的
t_list = bs.find_all(name_is_exists)
print(t_list)
# 2、kwargs 参数
t_list = bs.find_all(lang="en")
for item in t_list:
print(item)
# 3、text参数
t_list = bs.find_all(text=["穆永恒", "号"])
t_list = bs.find_all(text = re.compile("\d"))
for item in t_list:
print(item)
# 4、limit参数
t_list = bs.find_all("h1", limit=3)
for item in t_list:
print(item)
# 5、css选择器
t_list = bs.select("title") # 通过标签来查找
t_list = bs.select(".ffff") # 通过类名进行查找
t_list = bs.select("#dd") # 通过id进行查找
t_list = bs.select("h1[class='ffff']") # 通过属性进行查找
print(t_list)
三、总结
这一节主要的内容就是知道如何将一个HTML文件解析成BeautifulSoup类型,然后利用相对应的方法提取想要的数据内容。
还有一种比较重要的方法就是正则表达式,利用正则表达式来匹配我们想要的内容效率很高,后面再来学习。