背景

本节的知识实际上是属于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. Web UI 技术发展历程

    本文内容 纯文本和静态 HTML 页面 服务器端技术 插件技术--ActiveX.Applet 和 Flash Ajax 异步时代和基于 JavaScript 的 UI 技术 RIA--Adobe F ...

  2. struts-config.xml配置详解

    <struts-config>是struts的根元素,它主要有8个子元素,DTD定义如下: <!ELEMENT struts-config (data-sources?,form-b ...

  3. Oracle数据表中输入引号等特殊字符

    Oracle输入特殊字符的特殊方法: UPDATE BOOKMARK SET BM_VALUE=q'/ --在这里写下需要输入的内容(可以包括引号.回车等特殊的符号),所见即所得 /' -- WHER ...

  4. LintCode: Valid Parentheses

    C++ stack<char|int|string>, push(), pop(), top(), empty(), size() class Solution { public: /** ...

  5. How to check WWN and Multipathing on Windows Server

    There are many ways to find the World Wide Name (WWN) of fibre channel HBA connected to windows serv ...

  6. HDS Truecopy实现原理及项目的选择-诸多案例

    copy from:http://www.eygle.com/archives/2009/05/hds_truecopy_dataguard.html 诸多案例:http://wenku.baidu. ...

  7. 将Spring-boot应用部署到Docker容器

    1:Docker中设置阿里云加速 使用阿里云的加速器,因为在使用docker的时候,会需要从docker的网站下载镜像文件,下载速度可能会很慢.获得阿里云加速,需要登录阿里云开发者平台,然后点击右侧的 ...

  8. Unix线程概念、控制原语、属性

    线程: 线程基础概念: 线程在Linux中又称轻量级进程.而且它和进程都有PCB(进程控制块).可是差别是进程的虚拟地址空间是独享的,也就是每一个进程都有自己的虚拟地址空间.可是线程的PCB是共享的, ...

  9. MongoDB numa系列问题一:[initandlisten] connection refused because too many open connections:

    1:Mongod日志有很多这样的报错: [initandlisten] connection refused because too many open connections: 2:查看系统的限制 ...

  10. 《Unix&Linux大学教程》学习笔记二:指令常识

    1:指令的本质——调用可执行程序 在Shell输入命令时,其实就是根据名称运行相应的程序. 2:在系统中查找程序 which 指令名 type 指令名 3:时间与日历 date [-选项] 参数 ca ...