一、BeautifulSoup
BeautifulSoup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所以对象可以归纳为4种:
- Tag
- NavigableString
- BeatifulSoup
- Comment
#导入所需的模块
import requests
from bs4 import BeautifulSoup
file = open("./baidu.html","rb") #打开文档
html = file.read().decode("utf-8") #读取文档
bs = BeautifulSoup(html,"html.parser") #html.parser解析器解析html文档
1. Tag
标签及其内容:拿到它所找到的第一个内容
print(bs.title) #输出:<title>百度一下,你就知道 </title>
print(bs.a)
print(bs.head)
#print(type(bs.head)) #输出:<class 'bs4.element.Tag'>
输出:

有标签就有属性
print(bs.title.string) #百度一下,你就知道
#print(type(bs.title.string)) #<class 'bs4.element.NavigableString'>
输出:

2. NavigableString
标签里的内容(字符串)
print(bs.a.attrs) #标签里所有的属性值(字典形式)
print(bs.a.string) #输出字符串
print(type(bs)) #<class 'bs4.BeautifulSoup'>
输出:

3. #3.BeautifulSoup
表示整个文档 (想要进行xx内容的访问,可以直接使用这个)
print(bs.name) #输出:[document]
print(bs.attrs) #输出:{}
print(bs) #整个文档(树形结构,没有嵌套)
print(bs.a.string) #输出:新闻
print(type(bs.a.string)) #输出:<class 'bs4.element.Comment'>
4.Comment
是一个特殊的NavigableString 输出端内容不包含注释符号
二、应用
1.文档的遍历
print(bs.head.contents) #Tag的.content属性 获取Tag的子节点以列表形式返回
print(bs.head.contents[1]) #用列表索引获取其某个元素
输出:


- 更多内容,搜索文档
2.文档的搜索
(1)find_all()
- 方法一:
字符串过滤:会查找与字符串完全匹配的内容
t_list = bs.find_all("a")
- 方法二:( 最常用)
正则表达式搜索:使用search()方法来匹配内容
import re
t_list = bs.find_all(re.compile("a"))
- 方法三: (了解)
传入一个函数(方法),根据函数的要求来搜索
def name_is_exists(tag):
return tag.has_attr("name")
t_list = bs.find_all(name_is_exists)
for item in t_list:
print(item)
print(t_list)

(2)kwarg 参数
t_list = bs.find_all(id="head") #参数 (包括子内容
for item in t_list:
print(item)
输出:

#t_list = bs.find_all(class_=True)
t_list = bs.find_all(href="http://news.baidu.com")
for item in t_list:
print(item)
输出:

(3)text参数
t_list = bs.find_all(text="hao123")
t_list=bs.find_all(text=["hao123","地图","贴吧"])
t_list = bs.find_all(text=re.compile("\d")) #(所有的数字)应用正则表达式来查找包含特定文本的内容(标签里的字符串)
(4)limit参数
t_list = bs.find_all("a",limit=3) #先定个数
for item in t_list:
print(item)
输出:

三、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()) #获取文本
for item in t_list:
print(item)
本文介绍了BeautifulSoup库在解析HTML文档中的四种主要对象:Tag、NavigableString、BeautifulSoup和Comment,并展示了如何遍历和搜索文档内容。同时,讲解了CSS选择器的使用,如通过标签、类名、ID和属性来定位文档元素。内容涵盖了网页抓取和解析的基础操作。
164

被折叠的 条评论
为什么被折叠?



