左手用R右手Python系列——动态网页抓取与selenium驱动浏览器

但是所有这些都是基于静态页面的(抓包与API访问的除外),很多动态网页不提供API访问,这样就只能寄希望于selenium这种基于浏览器驱动技术来完成。

好在R语言中已经有了selenium接口包——RSelenium包,这为我们爬取动态网页提供了可能。我在今年年初写过一个实习僧网站的爬虫,那个是使用R语言中另一个基于selenium驱动的接口包——Rwebdriver来完成的。

当时技术不太成熟,思路也比较幼稚,我使用了导航器硬生生的遍历了500页内容,虽然最后也爬完了所有数据,但是耗时较长(将近40分钟),效率比较低。(感兴趣的小伙伴儿可以参考下上面那篇,不过实习僧的官网近期有较大改版,现在爬取难度肯定要比当初难多了!那个代码可能无法使用了)

最近抽时间学习了下RSelenium包的相关内容,这里感谢陈堰平老师在R语言上海大会现场所做《用RSelenium打造灵活强大的网络爬虫》的演讲,虽然未达现场,但是有幸看完视频版,其中的几个细节解决了我近段时间的一些困惑,这里表示感谢。

陈堰平老师主讲:《用RSelenium打造灵活强大的网络爬虫》

http://www.xueqing.tv/course/88

一个老外关于RSelenium的入门视频(youtobe请自行翻墙):

https://www.youtube.com/watch?v=ic65SWRWrKA&feature=youtu.be

当前R语言中能做到解析动态网页的有以下几个包(欢迎补充):

RSelenium(推荐)

Rwebdriver(不很成熟)

seleniumpipes(结合RSelenium更高效)

rdom(高级封装,灵活性不够)

Rcrawler(支持多进程)

webshot(专门用于动态网页截图)

本节以下内容正式分享今日案例,目标是拉勾网(不要问为什么,因为之前我还没有爬过拉钩)!

在介绍案例之前,请确保系统具备以下条件:

本地有selenium服务器并添加系统路径;

本地有plantomjs浏览器并添加系统路径;

安装了RSelenium包。

因为涉及到自动化点击操作,Chrome浏览器倒腾一下午硬是在点击环节出故障,找到了原因,因为拉勾网页面很长,而下一页按钮不在默认视窗范围内,使用了js脚本控制滑动条失败,原因不明,看到有人用firefox浏览器测试成功,我还没有试过,这里改用plantomjs无头浏览器(无需考虑元素是否被窗口遮挡的问题。)

R语言版:

启动服务

构建自动化抓取函数:

运行抓取函数

Python:

启动服务

构建抓取函数

运行抓取程序

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171209G044ZY00?refer=cp_1026

相关快讯

扫码关注云+社区