一.安装bs4模块
通过终端界面输入pip insert bs4来进行安装
二.准备工作
为了方便演示,这里提供html测试界面的代码,请将新建的html文件命名为:
测试-Beautifulsoup.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<ul>
<li>张三</li>
<li id="a3">李四</li>
<li id="a4">王五</li>
<a href="" id="aaa">测试1</a>
<span>测试测试</span>
</ul>
<a href="" title="a1">测试2</a>
<a href="" class="a2">测试3</a>
</div>
<div id="a5">
<span>
测试4
</span>
</div>
<p id="p1" class="p1">测试5</p>
</body>
</html>
首先在新建的py文件中导入BeautifulSoup模块
from bs4 import BeautifulSoup
然后将“测试-Beautifulsoup.html”打开,通过lxml内核解析,并将返回值赋给soup
soup=BeautifulSoup(open('测试-Beautifulsoup.html', encoding='utf-8'), 'lxml')#BeautifulSoup(open(文件名),'lxml'),lxml为使用的内核
这里要注意
BeautifulSoup默认打开的文件编码格式是gbk,所以要open(文件名,encoding='utf-8')
三.基本命令
这里就直接上代码了,每条都有注释、
1.find
print(soup.find('a'))#找到的是第一个a标签
print(soup.find('a',title='a1'))#找到的是第一个a标签中带title属性且title属性为a1的
# print(soup.find('a',class='a2'))错误,无法查找是因为class在python中也是一个关键字
print(soup.find('a',class_='a2'))#找到的是第一个a标签中带class属性且class属性为a1的
2.find_all
print(soup.find_all('a'))#找到的是所有的a标签,存储为列表形式
print(soup.find_all(['a','span']))#找到的是所有的a和span标签,查找多个标签时,将其存在一个[]内
print(soup.find_all('li',limit=2))#找到的是前两个li标签,limit=多少就取多少项
3.select
print(soup.select('a'))#找到的是所有的a标签,存储为列表形式
print(soup.select('.a2'))#找到class内容为a2的标签,.代表class
print(soup.select('#a3'))#找到id内容为a3的标签,#代表id
print(soup.select('li,a'))#找到所有li标签和a标签
#属性选择器——————通过属性寻找对应的标签
print(soup.select('li[id]'))#查找到有id的li标签,存储为列表
print(soup.select('li[id="a4"]'))#查找到id属性=a4的li标签
#层级选择器——————通过层级关系寻找对应的标签
#(1)后代选择器(类似于选择父辈可以直接查询孙辈)
print(soup.select('div li'))#查询div下所有li标签,以列表形式存储,' '代表li是div的后代
#(2)子代选择器(类似于选择父辈只能查询子辈,不能跳级查询孙辈)
print(soup.select('div>ul>li'))#查询div下ul下的所有li标签,以列表形式存储,'>'代表li是ul的子代,ul是div的子代
4.节点相关
#(1)获取节点内容
obj=soup.select('#a5')#找到id内容为a5的标签,存储为列表类型
#print(obj.get_text())#通过.get_text()来获取文本内容
#上面这条直接调用会报错,是因为obj为一个列表,所以要取出列表中的字符串,才能正常运行
obj1=obj[0]
print(obj1.get_text())#通过.get_text()来获取文本内容
#如果标签对象中只有内容,那么string和get_text()都能获取到内容
#如果标签对象中除了内容还有对象,那么只有get_text()能获取到内容
print(obj1.string)
#(2)节点的属性
obj=soup.select('#p1')#找到id内容为p1的标签,存储为列表类型
obj1=obj[0]
print(obj1.name)#name返回的是标签的名字
print(obj1.attrs)#attrs是将属性值以字典形式返回
#(3)获取节点的属性
obj=soup.select('#p1')#找到id内容为p1的标签,存储为列表类型
obj1=obj[0]
print(obj1.attrs.get('class'))#因为attrs返回的是字典类型,可以用get方式
print(obj1.get['class'])
print(obj1['class'])
#以上三种方法都可以取到class的值
这些就是BeautifulSoup中的一些基本语法,下一篇将进行一个项目演示。