python爬虫-bs4-BeautifulSoup

这节课来学习一下什么是BeautifulSoup库

功能:用于网页的数据解析

BeautifulSoup4将复杂的HTML文档装换为一个复杂的树形结构

每个节点都是python对象,所有对象可以归纳为以下四种:

-Tag 标签及其第一个内容(例如:百度一下,你就知道,title为标签)

-NavigableString 标签里的内容(字符串)(例如:百度一下,你就知道,为内容)

-BeautifulSoup 整个文档(用于整个文档方法的访问)

-Comment 特殊的NavigableString,输出的内容不包含注释

from bs4 import BeautifulSoup
file = open("./baidu.html",'rb')
html = file.read()
bs = BeautifulSoup(html,"html.parser")  # 使用 html.parser解析器,解析html文档

# 1.Tag    标签及其第一个内容(例如:<title>百度一下,你就知道</title>,title为标签)
# 2.NavigableString    标签里的内容(字符串)(例如:百度一下,你就知道,为内容)
# 找到第一个匹配到的标签及其内容(了解)
print(bs.title)
print(bs.a)
print(bs.head)

# 找到第一个匹配到的标签对应的内容(不打印标签)
print(bs.title.string)    # 字符串

# 找到第一个匹配到的标签所有的属性(不打印标签)
print(bs.title.attrs) # 字典

# 3.BeautifulSoup      整个文档(用于整个文档方法的访问)
print(bs)
print(bs.name)
print(bs.a.string)

# ----------------------------------------------------------------------(用)

# 遍历文档树(更多内容请百度)

# .contents:获取Tag的所有子节点,返回一个list
# .children:获取Tag的所有子节点,返回一个生成器
# .descendants:获取Tag的所有子孙节点


print(bs.head)
print('-----------------------------')
print(bs.head.contents) # 使用contents方法,以列表形式得到bs的head的内容

# 文档的搜索
# 1.find_all():配合字符串、正则表达式、自定义函数,查找内容
# 2.kwargs  参数
# 3.text    文本参数
# 4.limit   参数



#-------------------------------------------------------------------1.find_all()
find_all('字符串'):字符串过滤,查找与字符串完全匹配的内容
t_list = bs.find_all('a')   # 找到所有a标签
print(t_list)


# 正则表达式搜索:使用search()方法匹配内容
import re
t_list = bs.find_all(re.compile("a"))
print(t_list)


# 方法:传入一个函数(方法),根据函数要求搜索(了解)
def name_is_exists(tag):
    return tag.has_attr('name') # 返回具有name属性的

t_list = bs.find_all(name_is_exists)

for i in t_list:
    print(i)

#-----------------------------------------------------------------------2.kwargs

t_list = bs.find_all(id="head")

t_list1 = bs.find_all(class_=True)

t_list2 = bs.find_all(id="head")

for item in t_list:
    print(item)
#-----------------------------------------------------------------------3.text    文本参数
t_list = bs.find_all(text="hao123")

t_list1 = bs.find_all(text=["hao123",'地图'])

t_list2 = bs.find_all(text=re.compile("\d"))    # 用正则表达式查找包含特定文本的内容
for item in t_list:
    print(item)

#-------------------- ---------------------------------------------------4.limit   参数

t_list = bs.find_all("hao123",limit=3)  # 限定查找的个数

# css选择器

bs.select('标签')
print(bs.select('title'))

bs.select('类名')
print(bs.select('.mnav'))

bs.select('ID')
print(bs.select('#u1'))

bs.select('标签[属性]')
print(bs.select("a[class='bri']"))

bs.select('标签>子标签')
print(bs.select("head>title"))

bs.select('类名~兄弟类名')
print(bs.select(".mnav ~ .bri"))

你学会了吗?

猜你喜欢

转载自blog.csdn.net/weixin_40960364/article/details/106228287
今日推荐