爬虫再学习_BeautifulSoup

'''
BeautifulSoup4 将复杂html文档转换成一个复杂的树形结构,每个节点都是python对象,所有对象可以归纳为4中:
-Tag
-NavigableString
-BeautifulSoup
-Comment
'''
from bs4 import BeautifulSoup

file = open('./baidu.html','rb')
html = file.read()
bs = BeautifulSoup(html,'html.parser')

# 1.Tag 标签及其内容;拿到他所找到的第一个内容
bs.title  #...
bs.a #...
bs.head #...

# 2.NavigableString 标签里的内容(字符串)
bs.title.string # 标签里面的内容
bs.title.contents # 把所有有的东西以list给你
bs.a.attrs # 标签里的所有属性



# 3.BeautifulSoup 整个文档
bs.name
print(bs)


# 4.Comment 是一个特殊的NavigableString 输出的内容不包含注释符号

##########################
#文档的遍历
#1.contents:获取Tag所有的子节点,返回一个list
print(bs.head.contents)
print(bs.head.contents[1])
#2.children:获取Tag所有的子节点,返回一个生成器
for child in bs.head.children:
    print(child)

#文档的搜索
#1.find_all  字符串过滤:会查找与字符串完全匹配的内容
t_list = soup.find_all('a')
#2.正则表达式搜索:使用search()方法搜索
import re
t_list = soup.find_all(re.compile('a'))

#3.方法:传入一个函数(方法),根据函数的要求来搜索
def name_is_exists(tag):
    return tag.has_attr('href')
t_list = soup.find_all(name_is_exists) #把包含href的tag给搜索出来

#4.kwargs 参数
t_list = soup.find_all(id='head')
t_list = soup.find_all(class_ = True)

#5.text文本
t_list = soup.find_all(text='hao')
t_list = soup.find_all(test=['a','b','c'])
t_list = soup.find_all(text=re.compile('\d')) #应用正则表达式来查找包含特定文本的内容(标签里的字符串)是一个完整的内容

# css 选择器
t_list = soup.select('title')
t_list = soup.select('.mnav') # class为mnav的所有筛选出来
t_list = soup.select('#u1') # id为u1的所有筛选出来
t_list = soup.select('a[class="bri"]') # a标签的属性
t_list = soup.select('head > title') # head 下的title ; 通过子标签查找
t_list[0].get_text()

你可能感兴趣的:(爬虫再学习_BeautifulSoup)