zoukankan      html  css  js  c++  java
  • BeautifulSoup

    #!/usr/bin/env python
    # coding: utf-8
    
    # In[3]:
    
    from bs4 import BeautifulSoup
    
    
    # # BeautifulSoup介绍
    # 1、BeautifulSoup是基础HTML DOM的,会载入整个文档构建整个DOM树,因此时间和内存开销大,性能也就更低,而lxml只是进行局部的遍历
    # 
    # 2、BeautifulSoup只能读取字符串格式,不能从文件中读取
    # 
    
    # In[49]:
    
    
    text = '''
    <tr class="h">
                        <td class="l" width="374">职位名称</td>
                        <td>职位类别</td>
                        <td>人数</td>
                        <td>地点</td>
                        <td>发布时间</td>
                    </tr>
                                    <tr class="even">
                        <td class="l square" id='ceshi'><a target="_blank" href="position_detail.php?id=47281&amp;keywords=&amp;tid=87&amp;lid=0">PCG04-腾讯新闻高级Android开发工程师(北京)</a></td>
                        <td>技术类</td>
                        <td>1</td>
                        <td>北京</td>
                        <td>2019-01-23</td>
                    </tr>
                                    <tr class="odd">
                        <td class="l square"><a target="_blank" href="position_detail.php?id=47280&amp;keywords=&amp;tid=87&amp;lid=0">28603-113 微信支付智慧营销开发工程师(深圳)</a></td>
                        <td>技术类</td>
                        <td>1</td>
                        <td>深圳</td>
                        <td>2019-01-23</td>
                    </tr>
                                    <tr class="even">
                        <td class="l square"><a target="_blank" href="position_detail.php?id=47270&amp;keywords=&amp;tid=87&amp;lid=0">27020-量子实验室后台开发工程师(深圳)</a></td>
                        <td>技术类</td>
                        <td>2</td>
                        <td>深圳</td>
                        <td>2019-01-23</td>
                    </tr>
                                    <tr class="odd">
                        <td class="l square"><a target="_blank" href="position_detail.php?id=47263&amp;keywords=&amp;tid=87&amp;lid=0">22989-腾讯云售中交付技术总监(深圳)</a></td>
                        <td>技术类</td>
                        <td>1</td>
                        <td>深圳</td>
                        <td>2019-01-23</td>
                    </tr>
                                    <tr class="even">
                        <td class="l square"><a target="_blank" href="position_detail.php?id=47258&amp;keywords=&amp;tid=87&amp;lid=0">PCG04-测试开发工程师(北京)</a></td>
                        <td>技术类</td>
                        <td>1</td>
                        <td>北京</td>
                        <td>2019-01-23</td>
                    </tr>
                                    <tr class="odd">
                        <td class="l square"><a target="_blank" href="position_detail.php?id=47259&amp;keywords=&amp;tid=87&amp;lid=0">PCG04-AI评价优化高级工程师(深圳)</a></td>
                        <td>技术类</td>
                        <td>1</td>
                        <td>深圳</td>
                        <td>2019-01-23</td>
                    </tr>
                                    <tr class="even">
                        <td class="l square"><a target="_blank" href="position_detail.php?id=47260&amp;keywords=&amp;tid=87&amp;lid=0">PCG04-腾讯新闻高级后台开发工程师(北京)</a></td>
                        <td>技术类</td>
                        <td>1</td>
                        <td>北京</td>
                        <td>2019-01-23</td>
                    </tr>
                                    <tr class="odd">
                        <td class="l square"><a target="_blank" href="position_detail.php?id=47261&amp;keywords=&amp;tid=87&amp;lid=0">17757-前端开发工程师(北京)</a></td>
                        <td>技术类</td>
                        <td>1</td>
                        <td>北京</td>
                        <td>2019-01-23</td>
                    </tr>
                                    <tr class="even">
                        <td class="l square"><a target="_blank" href="position_detail.php?id=47262&amp;keywords=&amp;tid=87&amp;lid=0">30359-高级服务器开发工程师</a></td>
                        <td>技术类</td>
                        <td>1</td>
                        <td>深圳</td>
                        <td>2019-01-23</td>
                    </tr>
                                    <tr class="odd">
                        <td class="l square"><a target="_blank" href="position_detail.php?id=47252&amp;keywords=&amp;tid=87&amp;lid=0">25927-高级手游适配测试经理</a></td>
                        <td>技术类</td>
                        <td>1</td>
                        <td>上海</td>
                        <td>2019-01-23</td>
                    </tr>
                                    <tr class="f">
                        <td colspan="5">
                            <div class="left">共<span class="lightblue total">1424</span>个职位</div>
                            <div class="right"><div class="pagenav"><a href="javascript:;" class="noactive" id="prev">上一页</a><a class="active" href="javascript:;">1</a><a href="position.php?lid=&amp;tid=87&amp;keywords=请输入关键词&amp;start=10#a">2</a><a href="position.php?lid=&amp;tid=87&amp;keywords=请输入关键词&amp;start=20#a">3</a><a href="position.php?lid=&amp;tid=87&amp;keywords=请输入关键词&amp;start=30#a">4</a><a href="position.php?lid=&amp;tid=87&amp;keywords=请输入关键词&amp;start=40#a">5</a><a href="position.php?lid=&amp;tid=87&amp;keywords=请输入关键词&amp;start=50#a">6</a><a href="position.php?lid=&amp;tid=87&amp;keywords=请输入关键词&amp;start=60#a">7</a><a href="position.php?lid=&amp;tid=87&amp;keywords=请输入关键词&amp;start=70#a">...</a><a href="position.php?lid=&amp;tid=87&amp;keywords=请输入关键词&amp;start=1420#a">143</a><a href="position.php?lid=&amp;tid=87&amp;keywords=请输入关键词&amp;start=10#a" id="next">下一页</a><div class="clr"></div></div></div>
                            <div class="clr"></div>
                        </td>
    '''
    
    
    # In[29]:
    
    
    # 建立一个BeautifulSoup对象,传入需要解析的字符串并且传入需要用那种进行解析
    bs = BeautifulSoup(text,'lxml') 
    
    
    # In[30]:
    
    
    print(bs.prettify())   # 是html代码规范化,可以自动补全缺失的标签
    
    
    # # bs4库的使用方法
    
    # In[18]:
    
    
    # 1、获取所有的td 标签
    get_all_tds = bs.find_all('td')             #  返回的是一个列表类型
    for get_all_td in get_all_tds:
        print(get_all_td)
        print('==='*30)
    
    
    # In[21]:
    
    
    # 2、获取第二个td标签
    # 在find_all方法里面有个参数:limit ,如果你不想获取太多的数据的话可以使用这个参数,limit等于几就获取几个数据,我只想获取第二个数据
    print(bs.find_all('td',limit=2)[1])
    
    
    # In[23]:
    
    
    # 3、获取所有class=‘l square’的td标签
    get_squares = bs.find_all('td',class_='l square')
    for square in get_squares:
        print(square)
    
    
    # In[25]:
    
    
    # 也可以用attrs来获取
    get_squares = bs.find_all('td',attrs={'class':'l square'})
    for square in get_squares:
        print(square)
    
    
    # In[31]:
    
    
    # 4、获取多个条件的字符串,比如:<td class="l square" id='ceshi'> 获取class= square   id = ceshi的td标签
    get_squares = bs.find_all('td',class_='l square',id='ceshi')
    for square in get_squares:
        print(square)
    
    
    # In[32]:
    
    
    # 也可以用attrs来获取
    get_squares = bs.find_all('td',attrs={'class':'l square','id':'ceshi'})
    for square in get_squares:
        print(square)
    
    
    # In[34]:
    
    
    #5、获取a标签中的href属性值
    # 有两种方法,第一种:相对比较简单和方便
    a_tag_lists = bs.find_all('a')
    for a_tag_list in a_tag_lists:
        href = a_tag_list['href']
        print(href)
    
    
    # In[35]:
    
    
    # 第二种方法,利用attrs
    a_tag_lists = bs.find_all('a')
    for a_tag_list in a_tag_lists:
        href = a_tag_list.attrs['href']
        print(href)
    
    
    # In[40]:
    
    
    # 6、获取所有职位的信息(文本数据,不包含html代码)  你想获取所有的字符串,可以直接bs.strings,但是如果有空格的话
    # 是不会剔除的,bs.stripped_strings获取所有字符串的时候可以剔除空格
    mess_lists = bs.find_all('td')
    print(mess_lists[0].string)
    # for mess_list in mess_lists:
    #     print(mess_list.string)
    #     print('---'*30)
    
    
    # ## 总结
    
    # #### find_all的使用方法:
    # 1、在提取标签的时候,第一个参数是标签的名字,然后想通过标签属性进行过滤的时候,可以在这个方法中通过关键字参数的
    # 形式,将属性值的名字和对应的字传入进去,或者使用attrs属性,将所有的属性和值以字典的形式传入进去
    # 
    # 2、不想提取太多数据的时候可以用limit参数限制提取多少个
    # 
  • 相关阅读:
    Windows 下使用 GNUstep 编译并运行 Objective-C 程序
    【Objective-C】Windows下Objective-C开发环境配置
    Windows远程桌面连接Mac OS X
    Windows下编译objective-C
    自动更新开奖数据的excel文件,供大家下载
    总结一下这几天学习django的心得
    Windows上python开发--2安装django框架
    Centos 如何安装Django环境
    Centos 6.4 python 2.6 升级到 2.7
    centos启用ftp功能
  • 原文地址:https://www.cnblogs.com/114811yayi/p/10311960.html
Copyright © 2011-2022 走看看