• 还没被玩坏的robobrowser(4)——从页面上抓取感兴趣的内容


    背景

    本节的知识实际上是属于Beautiful Soup的内容。

    robobrowser支持Beautiful Soup,一般来说通过下面3个方法获取页面上感兴趣的内容

    • find
    • find_all
    • select

    这一节主要通过一些例子来讲解这几个方法

    预备知识

    一般来说学习Beautiful Soup是需要了解过滤器这个概念的。不过为了让大家能够容易理解,这里暂时屏蔽过滤器的知识,感兴趣的同学可以去官网学习一下。

    通过例子学习

    这一节里我们的例子还是http://itest.info/courses/2,python selenium自动化测试班这个页面。

    find方法

    find方法是返回页面上符合条件的第1个元素。

    #coding: utf-8
    import re
    from robobrowser import RoboBrowser
    
    url = 'http://itest.info/courses/2'
    b = RoboBrowser(history=True)
      b.open(url)
    
    # 通过tag name抓取
    
    #<title>重定向科技</title>
      title = b.find('title')  
      print title.text
    
    # 通过属性(attribute)抓取
    
    # <img id="logo-header" src="/assets/logo-0648b8fb283a9802457da74f0c157b12.png" />
      img = b.find(id='logo-header')
      print img['src']
    
    # <a href="/courses/4">android测试工具自制班</a>
      print b.find(href='/courses/4').text
    
    # <li class="active">python selenium自动化测试班</li>
      print b.find(class_='active', text=re.compile('python')).text
    
    
    

    find_all方法

    find_all方法的用法跟find基本相同,但是find_all会返回所有符合条件的tag的集合(ResultSet)。

    #coding: utf-8
    import re
    from robobrowser import RoboBrowser
    
    url = 'http://itest.info/courses/2'
    b = RoboBrowser(history=True)
      b.open(url)
    
    #页面上所有的a
      all_links = b.find_all('a')  
      for link in all_links:
        print link.text
    
    # 页面上所有class是container的div
        divs = b.find_all(class_='container')
        print divs
    
    # limit 参数控制返回的元素个数
    
    # 页面上前2个p
        first_two_p = b.find_all('p', limit=2)
        print first_two_p
    
    # 如果第1个参数是列表则返回相匹配的集合
    
    # 页面上所有的meta和title
        print b.find_all(['meta', 'img'])
    
    
    

    select方法

    select方法是我最喜欢的方法,该方法支持css选择器(可惜不是全部),返回的是list。

    #coding: utf-8
    import re
    from robobrowser import RoboBrowser
    
    url = 'http://itest.info/courses/2'
    b = RoboBrowser(history=True)
      b.open(url)
    
    #页面上所有的a
      all_links = b.select('a')  
      for link in all_links:
        print link.text
    
    # 页面上所有class是container的div
        divs = b.select('.container')
        print len(divs)
    
    

    其他技巧

    • 找到页面上所有具有id属性的元素b.find_all(id=True)
    • 不递归查找元素。也就是说只在的直接子后代中查找b.find('p', recursive=False)

    文本版权归乙醇所有,欢迎转载,但请标明出处。

    下一节:Beautiful Soup的过滤器

  • 相关阅读:
    CentOS7 搭建php环境
    多tomcat服务和nginx负载均衡配置
    linux grep命令
    centos7 远程连接其他服务器redis
    centos7 远程连接其他服务器mysql
    关于结构体对齐
    c语言打印一个整数的二进制形式
    c语言判断一个数是否为偶数
    vim的窗口切换
    pow(x,y)函数的实现算法(递归函数)
  • 原文地址:https://www.cnblogs.com/nbkhic/p/4216115.html
Copyright © 2020-2023  润新知