标签:包含 baidu 链接 sele doc lang 定义函数 过滤 parse
‘‘‘
BeautifulSoup4 即bs4,是一种解析器方法,将复杂html文档转换成一个复杂的树形结构,
每个节点都是python对象,所有对象可以归纳为4中:
- Tag
- NavigableString
- BeautifulSoup
- Comment
‘‘‘
from bs4 import BeautifulSoup
file = open("./baidu.html","rb")
html = file.read()
bs = BeautifulSoup(html,"html.parser") ## 使用parser解析器将html解析为一种树形结构
#1.Tag 标签及其内容:拿到所找到的第一个内容
## 打印出第一个标签及标签的内容
print(bs.title)
print(bs.head)
print(bs.a)
print(type(bs.a)) ## 类型为:<class ‘bs4.element.Tag‘>
## 2.NavigableString 标签里的内容
print(bs.a.string)
print(type(bs.a.string)) ## 类型为:<class ‘bs4.element.NavigableString‘>
print(bs.a.attrs) ## 取标签中的属性及值
## 3.BeautifulSoup 表示整个文档
print(type(bs)) ## 类型为:<class ‘bs4.BeautifulSoup‘>
print(bs.name) ##[document]
print(bs.attr) ## None
## bs是整个文档内容,因此直接对bs操作即可
print(bs)
## 4.Comment 是一个特殊的NavigableString,会将注释当做内容,但不会输出注释符号
print(bs.a.string)
print(type(bs.a.string))
## 以上均为介绍
## --------------------
## 以下为应用
# 1、文档的遍历
print(bs.head.contents[1]) ## 返回head的内容,以列表形式给出
print(bs.head.contents[1]) ## 取列表的第一个值
## 更多内容,可在搜索文档实现
# 2、文档的搜索
## 需要的内容如何定位
## 1) find_all() 按标签查找方法,查找所有
## 字符创过滤:会查找与字符串完全匹配的内容
t_list = bs.find_all("a") ## 查找所有的a标签链接内容,列表形式给出
print(t_list)
## 2)find_all之 search()方法,按标签中含有的内容匹配查找的方法
import re
## 引入正则表达式
t_list = bs.find_all(re.compile("a")) ## 标签中含有a,如head标签机器内容
print(t_list)
## 3) find_all之 自定义函数方法,传入一个函数(方法),根据函数的要求搜索
def name_is_exits(tag):
return tag.has_attr("name") ## 标签中含有name属性的
t_list = bs.find_all(name_is_exits)
for item in t_list:
print(item)
# 2、kwargs 参数
t_list = bs.find_all(id="head")
t_list = bs.find_all(class_=True) ## 这里的class_表示有class这个类
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")) ## 正则表达式来查找包含特定文本的内容(\d表示标签里的字符串)
for item in t_list:
print(item)
# 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来查找 <div id="u1">
t_list = bs.select("head > title") ## 通过字标签来查找
t_list = bs.select(".mnav ~ .bri") ## 通过同级的兄弟来查找
for item in t_list:
print(item)
标签:包含 baidu 链接 sele doc lang 定义函数 过滤 parse
原文地址:https://www.cnblogs.com/moox/p/13199458.html