目录
获得bs文档对象
# BeautifulSoup用来解析html等文本格式
# 引入bs4
from bs4 import BeautifulSoup
f = open("baidu.html", "rb")
html = f.read().decode("utf-8")
# html.parser指定一个解析器,代表解析html文档吗,因为BeautifulSoup不仅仅可以解析html,其他的一些文档格式也可以解析
bs = BeautifulSoup(html, "html.parser")
获取html标签,标签内容及属性
print(bs.title) # 获取网页<title></title>
print(bs.a) # 获取网页<a></a>
print(bs.head) # 获取网页<head></head>
# 获取标签里面的内容
print(bs.title.string)
print(bs.a.string)
# 获取标签的所有属性
print(bs.a.attrs)
文档遍历
print(bs.head.contents)
for i in range(len(bs.head.contents)):
item=bs.head.contents[i]
print(item.string)
# 1. 文档的搜索 find_all
# 字符串过滤,将文档所有的a标签搜索出来,但是只能搜索<a></a>标签,<adc></adc>标签就不可以
tagList = bs.find_all("a")
print(tagList)
# 将a标签的前三条搜索出来 用limit=3
tagList = bs.find_all("a", limit=3)
print(tagList)
正则搜索
# re用来写正则表达式的规则
import re
# 搜索出所有包含a的标签
compile() #里面传入的是正则表达式的规则
c_list = bs.find_all(re.compile("a"))
print(c_list)
传入函数方法搜索
# has_attr方法代表:如果对象有该属性返回 True,否则返回 False。
def name_is_has(tag):
return tag.has_attr("name")
# 将所有包含name属性的标签查询出来
h_list = bs.find_all(name_is_has)
print(h_list)
参数匹配搜索
# id=head的标签搜索出来
i_list = bs.find_all(id="head")
# 因为class是关键之 所有这里使用class_ ,所有有class属性的标签搜索出来
i_list=bs.find_all(class_=True)
# 将所有标签带有 href="http://www.baidu.com/more/" 属性的搜索出来
i_list=bs.find_all(href="http://www.baidu.com/more/")
for item in i_list:
print(item)
text文本搜索
# 将所有匹配的文本搜索出来
t_list = bs.find_all(text="贴")
print(t_list)
# 可以传多个text参数
t_list = bs.find_all(text=["hao123", "新闻", "贴吧"])
print(t_list)
css选择器搜索
# 将所有的<title></title>查找出来
c_list=bs.select('title')
# 将所有的class=s-top-more 查找出来
c_list=bs.select(".s-top-more")
# 将所有的id=u1的标签查找出来
c_list = bs.select("#u1")
# 将所有div包含class='guide-info' 属性的标签查找出来
c_list=bs.select("div[class='guide-info']")
# 通过子标签来查找
c_list=bs.select("head>title")
# 获取该标签的文本
msg=c_list[0].get_text()
print(msg)
print(c_list)
# 还有其他选择器,比如兄弟选择器等等也可以查找