背景

本节的知识实际上是属于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的过滤器

还没被玩坏的robobrowser(4)——从页面上抓取感兴趣的内容的更多相关文章

  1. 还没被玩坏的robobrowser(8)——robobrowser的实现原理

    背景 学习使用工具实际上不难,不过我们应该通过阅读工具源码来提升自己的水平. 多读代码,读好代码.很不错,robobrowser的代码简单易懂,值得学习. 预备知识 源码地址 一起其实是从browse ...

  2. 还没被玩坏的robobrowser(7)——表单操作

    背景 有一些站点是需要登录之后才能抓取内容的,另外做web测试的时候登录是家常便饭. 这一节里我们就以登陆testerhome为例,讲解一下robobrowser中form的操作. 预备知识 get_ ...

  3. 还没被玩坏的robobrowser(6)——follow_link

    背景 在做spider的时候,我们经常会有点击链接的需求. 考虑这样的一个简单spider:获取qq.com主页上的今日话题中的内容. 一般思路是先去qq.com首页上找到今日话题的链接,然后点击这个 ...

  4. 还没被玩坏的robobrowser(3)——简单的spider

    背景 做一个简单的spider用来获取python selenium实战教程的一些基本信息.因为python selenium每年滚动开课,所以做这样一个爬虫随时更新最新的开课信息是很有必要的. 预备 ...

  5. 还没被玩坏的robobrowser(1)-简介

    今天偶然发现了一个很有意思的python库——robobrowser.简单的看了一下,觉得这个东东作为轻量的爬虫还是很适合的.另外这个做一些简单的web测试也未尝不可. 好了,那么问题来了. 什么是r ...

  6. 还没被玩坏的robobrowser(5)——Beautiful Soup的过滤器

    背景 本节的知识还是属于Beautiful Soup的内容. Beautiful Soup的find和find_all方法非常强大,他们支持下面一些类型的过滤器. 字符串 最简单的过滤器是字符串.在搜 ...

  7. 还没被玩坏的robobrowser(2)——安装及快速开始

    安装robobrowser 注意:这里假设你知道如何使用pip安装python的库的知识,如果你不了解这一块的话,点这里获取帮助. 强烈推荐使用pip安装. pip install robobrows ...

  8. 玩转FPGA边缘视觉——4k视频图像抓取

    随着现代图像及视频处理技术的不断发展,人们对图像处理提出了新的要求,最近几年,图像的分辨率和扫描频率都有了较大范围的提升,1080P分辨率的视频已经非常流行,2K甚至4K分辨率的图像也在火热发展中. ...

  9. 玩爽了!直接在Chrome里抓取数据

    一个小测试发现可以自动做题,于是想通过脚本的方式看能不能获取相应的题库,刚好可以学习一下JS异步操作.花了一天时间,总算跑顺利了,遇到了不少坑.记录下来分享. 1.JS如何顺序执行 JS有强大的异步操 ...

随机推荐

  1. 删除数据库mysql

    drop命令用于删除数据库. drop命令格式:drop database <数据库名>; 例如,删除名为 xhkdb的数据库:mysql> drop database xhkdb; ...

  2. MyBatis对于Java对象里的枚举类型处理

    平时咱们写程序实体类内或多或少都会有枚举类型属性,方便嘛.但是mybatis里怎么处理他们的增删改查呢? 要求: 插入的时候,会用枚举的定义插入数据库,我们希望在数据库中看到的是数字或者其他东西: 查 ...

  3. thinkphp3返回json或jsonp数据

    1.返回json数据 public function demo1() { $data = 'ok'; $this->ajaxReturn($data); } public function de ...

  4. APP测试体系

    网上找的图片,总结的很好:

  5. Spring 基础概念——DI、IOC(一)

    一.IOC 控制反转 package com.qunar.studyspring.bean; import com.qunar.studyspring.dao.PersonDao; import co ...

  6. px 和 em 的区别

    相同点:px和em都是长度单位: 异同点:px的值是固定的,指定是多少就是多少,计算比较容易.em得值不是固定的,并且em会继承父级元素的字体大小.浏览器的默认字体高都是16px.所以未经调整的浏览器 ...

  7. Python学习笔记三:模块

    一:模块 一个模块就是一个py文件,里面定义了一些业务函数.引用模块,可以用import语句导入.导入模块后,通过 模块.函数名(参数)  来使用模块中的函数.如果存在多个同名模块,则前面模块名需要加 ...

  8. Java HttpClient Basic Credential 认证

    HttpClient client = factory.getHttpClient(); //or any method to get a client instance Credentials cr ...

  9. JavaSE入门学习7:Java基础语法之语句(下)

    继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...

  10. django之创建第7-4个项目-配置views文件实现url传值

    即:怎么实现url?name=xiaodeng&age=28等类似传值处理 1.配置views文件 # Create your views here. #coding:utf-8 from d ...