1. 前言

大家好,我是安果!

今天推荐一款小众轻量级的爬虫库:RoboBrowser

RoboBrowser,Your friendly neighborhood web scraper!由纯 Python 编写,运行无需独立的浏览器,它不仅可以做爬虫,还可以实现 Web 端的自动化

项目地址:

​https://github.com/jmcarp/robobrowser

2. 安装及用法

在实战之前,我们先安装依赖库及解析器

PS:官方推荐的解析器是 「lxml」

# 安装依赖
pip3 install robobrowser # lxml解析器(官方推荐)
pip3 install lxml

RoboBrowser 常见的 2 个功能为:

  • 模拟表单 Form 提交

  • 网页数据爬取

使用 RoboBrowser 进行网页数据爬取,常见的 3 个方法如下:

  • find

    查询当前页面满足条件的第一个元素

  • find_all

    查询当前页面拥有共同属性的一个列表元素

  • select

    通过 CSS 选择器,查询页面,返回一个元素列表

需要指出的是,RoboBrowser 依赖于 BS4,所以它的使用方法和 BS4 类似

更多功能可以参考:

https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

3. 实战一下

我们以「 百度搜索及爬取搜索结果列表 」为例

3-1  打开目标网站

首先,我们实例化一个 RoboBrowser 对象

from time import sleep

from robobrowser import RoboBrowser

home_url = 'https://baidu.com'

#  parser: 解析器,HTML parser; used by BeautifulSoup
# 官方推荐:lxml
rb = RoboBrowser(history=True, parser='lxml') # 打开目标网站
rb.open(home_url)

然后,使用 RoboBrowser 实例对象中的 open() 方法打开目标网站

3-2  自动化表单提交

首先,使用 RoboBrowser 实例对象获取网页中的表单 Form

然后,通过为表单中的输入框赋值模拟输入操作

最后,使用 submit_form() 方法进行表单提交,模拟一次搜索操作

# 获取表单对象
bd_form = rb.get_form() print(bd_form) bd_form['wd'].value = "AirPython" # 提交表单,模拟一次搜索
rb.submit_form(bd_form)

3-3  数据爬取

分析搜索页面的网页结构,利用 RoboBrowser 中的 select() 方法匹配出所有的搜索列表元素

遍历搜索列表元素,使用 find() 方法查询出每一项的标题及 href 链接地址

# 查看结果
result_elements = rb.select(".result") # 搜索结果
search_result = [] # 第一项的链接地址
first_href = '' for index, element in enumerate(result_elements):
title = element.find("a").text
href = element.find("a")['href']
search_result.append(title) if index == 0:
first_href = element.find("a")
print('第一项地址为:', href) print(search_result)

最后,使用 RoboBrowser 中的 follow_link() 方法模拟一下「点击链接,查看网页详情」的操作

# 跳转到第一个链接
rb.follow_link(first_href) # 获取历史
print(rb.url)

需要注意的是,follow_link() 方法的参数为带有 href 值的 a 标签

4. 最后

文中结合百度搜索实例,使用 RoboBrowser 完成了一次自动化及爬虫操作

相比 Selenium、Helium 等,RoboBrowser 更轻量级,不依赖独立的浏览器及驱动

如果想处理一些简单的爬虫或 Web 自动化,RoboBrowser 完全够用;但是面对一些复杂的自动化场景,更建议使用 Selenium、Pyppeteer、Helium 等

我已经将文中完整源码文件传到后台,关注公众号「 AirPython 」,后台回复「 rb 」即可获得

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

推荐一款小众且好用的 Python 爬虫库 - RoboBrowser的更多相关文章

  1. 推荐10款超级有趣的HTML5小游戏

    HTML5的发展速度比任何人的都想像都要更快.更加强大有效的和专业的解决方案已经被开发......甚至在游戏世界中!这里跟大家分享有10款超级趣味的HTML5游戏,希望大家能够喜欢! Kern Typ ...

  2. 【转】推荐10款最热门jQuery UI框架

    推荐10款最热门jQuery UI框架 原创 在进行Web开发时,并非所有的库都适合你的项目,但你仍需要收藏一些Web UI设计相关的库或框架,以在你需要的时候,加快你的开发效率.本文为你推荐10款非 ...

  3. 推荐一款Mac上好用的Markdown编辑器

    [TOC] 推荐一款Mac上好用的Markdown编辑器 正文 我算是一位Evernote的重度用户吧.之前也尝试过为知笔记,有道云笔记,微软的onenote,最后还是觉的Evernote.因为我喜欢 ...

  4. 推荐几款我一直在用的chrome插件(上)

    我用的chrome插件挺多的,所谓工欲善其事必先利其器,我热衷于搜寻好用的工具来让我平时的工作事半功倍.下面介绍几款我正在用的感觉还不错的插件,如果大家还有其它好用的(肯定有,chrome插件库太庞大 ...

  5. 推荐几款我一直在用的chrome插件(下)

    请先看:推荐几款我一直在用的chrome插件(上) 6. Pocket 可以很方便的保存文章.视频等供以后查看,即实现了“Read it later”功能.有了 Pocket,您可以将所有想下次读的内 ...

  6. 墙裂推荐4款js网页烟花特效

    以下是几款网页特效和一款软件: http://keleyi.com/keleyi/phtml/jstexiao/1.htm  http://keleyi.com/keleyi/phtml/jstexi ...

  7. 再次推荐一款逼真的HTML5下雪效果

    再次推荐一款逼真的下雪效果 效果图: 效果描述:之前推荐过一款下雪的jQuery插件之前的那款下降速度比较缓慢,今天推荐的这个下降速度比较快,大雪哇 使用方法:1.将index.html中的样式复制到 ...

  8. 【开发软件】推荐一款MAC OS X 下php集成开发环境mamp

      这里给大家推荐一款在mac上搭建WEB服务器环境的集成环境安装软件,非常的好用,需要的朋友可以拿去,不用谢 ^_^   之前苦于mac上搭建本地服务器之艰辛,找寻好久都没找到一款类似windows ...

  9. 推荐15款最佳的 jQuery 分步引导插件

    当用户浏览到一个网站,它可能从不知道如何浏览,如何操作网站或 Web 应用程序的内容和流程.在这篇文章中,我们编制了一些最好的 jQuery 引导插件列表.你会发现这些插件对于提高你的网站的整体用户体 ...

随机推荐

  1. C语言之库函数的模拟与使用

    C语言之库函数的模拟与使用 在我们学习C语言的过程中,难免会遇到这样的一种情况: 我们通常实现一个功能的时候,费尽心血的写出来,却有着满满的错,这时却有人来告诉你说:这个功能可以用相应的库函数来实现. ...

  2. VS中使用TreeView的Checked属性问题

    VS中使用TreeView,当需要用到Checked属性,并需要同步子节点和父节点的Checked属性时,若使用AfterCheck事件会导致死循环,这里我使用的是NodeMouseClick事件.代 ...

  3. IFIX 5.9 报警存sql

    环境 win7x64 + ifix 5.9 + sql server 2008 (sql 我装在了别的win10的机器上,和ifix的win7不在同一个机器,网是通的) 1 安装sql server ...

  4. 对于kmp求next数组的理解

    首先附上代码 1 void GetNext(char* p,int next[]) 2 { 3 int pLen = strlen(p); 4 next[0] = -1; 5 int k = -1; ...

  5. CNN可视化技术总结(三)--类可视化

    CNN可视化技术总结(一)-特征图可视化 CNN可视化技术总结(二)--卷积核可视化 导言: 前面我们介绍了两种可视化方法,特征图可视化和卷积核可视化,这两种方法在论文中都比较常见,这两种更多的是用于 ...

  6. TypeScript TSConfig All In One

    TypeScript TSConfig All In One tsconfig.json https://www.typescriptlang.org/tsconfig https://www.typ ...

  7. Linux shell create file methods

    Linux shell create file methods touch, cat, echo, EOF touch $ touch file.py $ touch file1.txt file2. ...

  8. ES6 & import * & import default & import JSON

    ES6 & import * & import default & import JSON import json & default value bug api.js ...

  9. 「NGK每日快讯」12.15日NGK公链第42期官方快讯!

  10. Java中print、printf、println的区别

    Java中print.printf.println的区别 区别 print:标准输出,但不换行,不可以空参: println:标准输出,但会自动换行,可以空参,可以看做:println()相当于pri ...