BeautifulSoupeautifulSoup使用笔记
from bs4 import BeautifulSoup
'''
1、find_all的使用:
soup.find_all("ul");soup.find_all("ul",limit=2)[1];find_all("ul",class_="dl-tab-conten")
soup.find_all("ul",attrs={"class":"dl-tab-conten","id":"J_NavContent"})
2、find与find_all的区别
find只会返回一个满足条件的标签
3、使用find和find_all的过滤条件
1、关键字获取,2、attrs参数获取
4、获取标签的属性
1、通过下表获取 href = a["href"]
2、通过attrs属性获取 href = attrs["href"]
5、string和stripped_strings、strings属性及get_text方法
1、string获取某个标签下的非标签字符串
2、strings获取某个标签下的子孙非标签字符串
3、stripped_strings获取某个标签下的子孙非标签字符串并去掉空格
4、get_text()获取某个标签下的子孙非标签字符串,不是以列表的形式返回而是以字符串的形式返回
select方法
'''
"""
1、Tag:BeautifulSoup中所有的标签都是Tag类型,并且BeautifulSoup的对象其本质上也是一个
Tag类型,所以其实一些方法比如find、find_all并不是BeautifulSoup的,而是Tag的。
2、NavigableString:继承自python中的str,用起来就跟使用python的str是一样的
3、BeautifulSoup:继承Tag,用来生成BeautifulSoup数的,对于一些查找方法,比如find、select这些
,其实还是Tag
4、Coment:这个也没什么好说的,就是继承自NavigableString
5、contents和children:返回某个标签下的直接子元素,其中也包含字符串,他们的区别是:contents返回的是一个列表,chidren
返回的是一个迭代器
CSS 选取器
p 标签
.class 类
#id
p > a 仅仅子元素
p a 子孙元素
input[class="pwd"]
"""
html = """
<html>
<head>
<title>easytest测试平台</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="/static/css/dpl-min.css" rel="stylesheet" type="text/css" />
<link href="/static/css/bui-min.css" rel="stylesheet" type="text/css" />
<link href="/static/css/main-min.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="/static/img/title.ico">
</head>
<body style="min-height: 1200px;" >
<div class="header">
<div class="dl-title">
<a href="http://www.baidu.com" title="关于我们">
<span class="lp-title-port">easytest测试平台</span><span class="dl-title-text"></span>
</a>
</div>
<div class="dl-log">欢迎您,小伙伴</div>
</div>
</div>
<div class="content">
<div class="dl-main-nav">
<div class="dl-inform"><div class="dl-inform-title">贴心小秘书<s class="dl-inform-icon dl-up"></s></div></div>
<ul id="J_Nav" class="nav-list ks-clear">
<li class="nav-item dl-selected"><div class="nav-item-inner nav-home">首页</div></li>
</ul>
</div>
<ul id="J_NavContent" class="dl-tab-conten">
</ul>
</div>
<script type="text/javascript" src="/static/js/jquery-1.8.1.min.js"></script>
<script type="text/javascript" src="/static/js/bui.js"></script>
<script type="text/javascript" src="/static/js/config.js"></script>
<script>
BUI.use('common/main',function(){
var config = [{
id:'menu',
homePage : 'home',
menu:[{
text:'目录',
items:[
{id:'home',text:'接口管理',href:'home',closeable : true},
{id:'back',text:'后台管理',href:'/admin',closeable : true}
]
},
{
text:'常用地址及工具',
items:[
{id:'link',text:'地址集合',href:'link',closeable : true},
{id:'tool',text:'工具',href:'tool',closeable : true}
]
},
]
},
];
new PageUtil.MainPage({
modulesConfig : config
});
});
</script>
<p>
<!-- 我是注释 -->
</p>
</body>
</html>
"""
soup = BeautifulSoup(html,"lxml") #创建beautifulsoup对象,lxml为解析器,解析器:html5lib
#1、获取所有ul标签
uls = soup.find_all("ul")
#2、获取第二个ul标签
ul_2 = soup.find_all("ul",limit=2)[1]
# print(ul_2)
# for ul in uls:
# print(type(ul))
#3、获取所有class等于dl-tab-conten
trs = soup.find_all("ul",class_="dl-tab-conten")
# print(uls)
#4、获取所有class="dl-tab-conten" id="J_NavContent"的标签
uls = soup.find_all("ul",attrs={"class":"dl-tab-conten","id":"J_NavContent"})
# print(uls)
#5、获取所有a标签的href属性
aList = soup.find_all("a")
for a in aList:
href = a["href"]
# print(href)
#通过attrs属性的方式
href = a.attrs["href"]
# print(href)
divs = soup.find_all("div")
# for div in divs:
# print(div.string)#获取文本
# infos = list(div.strings)#获取所有文本
# print(infos)
# infos = list(div.stripped_strings)#获取所有文本并去空格
# print(infos)
# infos = div.get_text()
# print(infos)
#css选择器提取元素
#1、获取所有div标签
divs = soup.select("div")
print(divs)
#2、获取第2个div标签
soup.select("div")[1]
#3、获取所有class等于even的tr标签
divs = soup.select("div.lp-title-port")
div = soup.select("div[class='lp-title-port']")
#4、获取所有a标签的href属性
aList = soup.select("a")
for a in aList:
print(a["href"])
p = soup.find("p")
print(p.string)
div = soup.find("div")
print(div.contents)