第四课-BeautifulSoup

折月煮酒 提交于 2019-12-09 19:43:00
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
返回的是一个迭代器
"""

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)

 end.................. 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!