BeautifulSoup是将复杂的HTML文档转化为一个复杂的树形结构,每个节点都是python对象,可以归纳为以下四种:
- Tag
- NavigableString
- BeautifulSoup
- Comment
注:以下的baidu.html是以baidu首页为例。
1.文档内容的获取
Tag
找到网页对应的标签及其内容
file = open("baidu.html", 'r', encoding='utf-8')
html = file.read()
bs = BeautifulSoup(html, "html.parser") # 对html文档进行解析,解析器是:html.parser
print(bs.title)
print(bs.a)
print(bs.head)
result---------------------------------
<title>百度一下,你就知道</title>
<a class="toindex" href="/">百度首页</a>
NavigableString
找到对应标签里匹配内容
from bs4 import BeautifulSoup
file = open("baidu.html", 'r', encoding='utf-8')
html = file.read()
bs = BeautifulSoup(html, "html.parser") # 对html文档进行解析,解析器是:html.parser
print(bs.title.string)# 标签下的内容
print(bs.a.string)
print(bs.head.string)
print(bs.a.attrs) # 标签的属性值
result----------------------------------
百度一下,你就知道
百度首页
{'class': ['toindex'], 'href': '/'}
# 这里发现,只把内容解析出来了,标签都没有保存
BeautifulSoup
整个bs就是BeautifulSoup
Comment
comment代表是注释,是一种特殊的NavigableString。当解析的时候,一些注释的内容不会被解析出来,进而看起来和NavigableString的内容是一样的,但是他们的数据类型是不一样的。
2.文档内容的遍历
find_all()
find_all都是根据标签tag来匹配的
1-直接查找对应的tag节点名字
t_list = bs.find_all('a')
2-利用正则表达式,只要tag包含某个字母就可以匹配
t_list = bs.find_all(re.compile('a'))
kwargs参数匹配
from bs4 import BeautifulSoup
file = open("baidu.html", 'r', encoding='utf-8')
html = file.read()
bs = BeautifulSoup(html, "html.parser") # 对html文档进行解析,解析器是:html.parser
t_list = bs.find_all(id='head') # 根据id='head'进行匹配
t_list_ = bs.find_all(class_=True) # 判断是不是有class这么一项
print(t_list)
print(t_list_)
text文本参数匹配
文本参数我目前的理解是显示在人眼前的那些数据。
CSS选择器
from bs4 import BeautifulSoup
file = open("baidu.html", 'r', encoding='utf-8')
html = file.read()
bs = BeautifulSoup(html, "html.parser") # 对html文档进行解析,解析器是:html.parser
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') # 通过子标签来查找,查找head下面的title的内容
t_list = bs.select('.manv ~ bri') # 通过兄弟节点来进行查找
for item in t_list:
print(item)