BeautifulSoup是python的一个库,类似于正则表达式但又与其不同,主要用来爬取网页数据,提供一些用来处理导航、搜索、修改、分析树等功能的函数。通过解析文档为用户提供需要抓取的数据,用起来也比较简单。
刚才说是通过解析文档,首先要保存文档,接上期获取网页后
1 | html = response.read() |
获取网页后要先解码,再进行保存。
- BeautifulSoup的安装这里使用beautifulsoup4
1
pip install beautifulsoup4
- beautifulsoup解析
这里只以html.parser-html文件解析展开,夹杂re正则表达式1
2
3
4
5from bs4 import BeautifulSoup
import re
file = open('douban.html','rb')
html = file.read()
bs = BeautifulSoup(html,"html.parser")
当然,这个库的解析并不止这些,小编的“墨水”稍微有点少哈。
上述调试好之后就可以使用了。
- 美汤的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31print(bs.a) #查找有a的内容
print(type(bs.a)) #查看a的类型
print(bs.a.attrs) #可以拿到一个标签里面所有的属性,以字典形式呈现。
# 文档的遍历
print(bs.head.contents) #动手实践会有更多惊喜和深入的理解
# 文档的搜索
# 1.find_all()
t_list = bs.find_all("a") #查找所有的a,列表形式
# 正则表达式,使用search()方法来匹配内容
t_list = bs.find_all(re.compile("a")) #这里是只要包含“a”的列表都会呈现出来(简单介绍)
# 方法:传入一个函数(方法),根据函数的要求来搜索
def name_is_exists(tag):
return tag.has_attr("name")
t_list = bs.find_all(name_is_exists)
# 2.kwards 参数
t_list = bs.find_all(id="head")
for item in t_list:
print(item) #罗列
# 3. Text参数
t_list = bs.find_all(text=[]) #可以是列表,可以是单个
t_lish = bs.find_all(text=re.comple("\d")) #含有数字的文本
# 4. limit参数
t_list = bs.find_all("a",limit=整形) #限制搜索的个数
# css选择器
t_list = bs.select('title') #通过标签查找
t_list = bs.select(".mnav") #通过类名来查找
t_list = bs.select("#u1") #通过id来查找
t_list = bs.select("a[class='bri']") #通过属性来查找
t_list = bs.select("head > title") #通过子标签来查找
t_list = bs.select(".mnav ~ .bri") #通过兄弟标签来查找
print(t_list[0].get_text()) #找到某个指定列的文本