第4课-BeautifulSoup
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)