#服务器响应的文件生成对象
# soup = BeautifulSoup(response.read(),'lxml')
#本地文件生成的对象
# soup = BeautifulSoup(open('1.html'),'lxml')
from bs4 import BeautifulSoup
#解析本地文件生成的对象
# soup = BeautifulSoup(open('1.html'),'lxml')
#默认打开格式为gbk格式 需要指定编码
soup = BeautifulSoup(open('075bs4的基本使用.html',encoding='utf-8'),'lxml')
#根据标签名查找节点 找到的是第一个符合条件的数据 print(soup.a)
#attrs获取标签的属性和属性值 print(soup.a.attrs)
#************bs4的一些函数*******
#(1)find
# 反回第一个符合条件的数据
# print(soup.find('a'))
#根据title的值找到对应的标签对象
# print(soup.find('a',title='a2'))
#根据class的值找到相应的标签对象 注意:class需添加下划线
# print(soup.find('a',class_="a1"))
#(2)find_all
#返回一个列表 并且返回了所有的a标签
#若想获取多个标签的数据 则须在find_all的参数中添加的是列表的数据
# print(soup.find_all(['a','span']))
#limit的作用是查找前几个数据
# print(soup.find_all('li',limit=2))
#(3)select
#select返回的是一个列表 并且会返回多个数据
# print(soup.select('a'))
#可以通过 . 代表class 类选择器
# print(soup.select('.a1'))
#可以通过 # 代表id 类选择器
#属性选择器----------通过属性来寻找都对应的标签
#查找li标签中有id的标签
# print(soup.select('li[id]'))
#查找li标签中有id=2的标签
# print(soup.select('li[id="2"]'))
#层级选择器
# 后代选择器 空格
#要找到的是div下的li
# print(soup.select('div li'))
#子代选择器
# 某标签的第一级子标签
#注意: 很多的计算机编程语言中,若不加空格会报错,bs4库中可加可不加 div > ul > li
# print(soup.select('div>ui>li'))
#找到a标签和li标签的所有的对象
# print(soup.select('a,li'))
#节点信息
# 获取节点内容
# obj = soup.select('#d1')[0] #列表格式 根据下标读取
#如果标签对象中 只有内容 那么string和get_text()都可以使用
#如果标签对象中 除了内容还有标签 那么string就获取不到数据 而get_text()可以获得数据
# print(obj.string)
# print(obj.get_text()) #推荐使用
#节点属性
# obj = soup.select('#p1')[0]
# #name是标签的名字
# print(obj.name)
#将属性值作为一个字典返回
# print(obj.attrs)
#访问节点的属性
obj = soup.select('#p1')[0]
print(obj.attrs.get('class'))
print(obj.get('class'))
print(obj['class'])
本地文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<ul>
<li id="l3">北京</li>
<li id="l2">上海</li>
<li id="c2" class="c1">深圳</li>
<a href="" id="">尚硅谷</a>
<span>嘿嘿嘿</span>
</ul>
</div>
<a href="" title="a2">百度</a>
<div id="d1">
<span>
哈哈哈
</span>
</div>
<p id="p1" class="p1">hehe</p>
</body>
</html>