关于基础的网络数据抓取相关内容,本公众号已经做过很多次分享,特别是R语言的爬虫框架(RCurl+XML/httr+rvest[xml2+selectr])已经形成了较为丰富的教程系统。
但是所有这些都是基于静态页面的(抓包与API访问的除外),很多动态网页不提供API访问,这样就只能寄希望于selenium这种基于浏览器驱动技术来完成。
好在R语言中已经有了selenium接口包——RSelenium包,这为我们爬取动态网页提供了可能。我在今年年初写过一个实习僧网站的爬虫,那个是使用R语言中另一个基于selenium驱动的接口包——Rwebdriver来完成的。
当时技术不太成熟,思路也比较幼稚,我使用了导航器硬生生的遍历了500页内容,虽然最后也爬完了所有数据,但是耗时较长(将近40分钟),效率比较低。(感兴趣的小伙伴儿可以参考下上面那篇,不过实习僧的官网近期有较大改版,现在爬取难度肯定要比当初难多了!那个代码可能无法使用了)
最近抽时间学习了下RSelenium包的相关内容,这里感谢陈堰平老师在R语言上海大会现场所做《用RSelenium打造灵活强大的网络爬虫》的演讲,虽然未达现场,但是有幸看完视频版,其中的几个细节解决了我近段时间的一些困惑,这里表示感谢。
陈堰平老师主讲:《用RSelenium打造灵活强大的网络爬虫》 www.xueqing.tv/course/88 一个老外关于RSelenium的入门视频(youtobe请自行翻墙): www.youtube.com/watch?v=ic6…
当前R语言中能做到解析动态网页的有以下几个包(欢迎补充):
- RSelenium(推荐)
- Rwebdriver(不很成熟)
- seleniumpipes(结合RSelenium更高效)
- rdom(高级封装,灵活性不够)
- Rcrawler(支持多进程)
- webshot(专门用于动态网页截图)
本节以下内容正式分享今日案例,目标是拉勾网(不要问为什么,因为之前我还没有爬过拉钩)!
在介绍案例之前,请确保系统具备以下条件:
本地有selenium服务器并添加系统路径;
本地有plantomjs浏览器并添加系统路径;
安装了RSelenium包。
因为涉及到自动化点击操作,Chrome浏览器倒腾一下午硬是在点击环节出故障,找到了原因,因为拉勾网页面很长,而下一页按钮不在默认视窗范围内,使用了js脚本控制滑动条失败,原因不明,看到有人用firefox浏览器测试成功,我还没有试过,这里改用plantomjs无头浏览器(无需考虑元素是否被窗口遮挡的问题。)
R语言版:
1 | 复制代码#!!!这两句是在cmd或者PowerShell中运行的! |
启动服务
1 | 复制代码#给plantomjs浏览器伪装UserAgent |
构建自动化抓取函数:
1 | 复制代码#自动化抓取函数: |
运行抓取函数
1 | 复制代码url <- "https://www.lagou.com/zhaopin" |
Python:
1 | 复制代码import os,random,time |
启动服务
1 | 复制代码dcap = dict(DesiredCapabilities.PHANTOMJS) |
构建抓取函数
1 | 复制代码def getlaogou(driver,url): |
运行抓取程序
1 | 复制代码url = "https://www.lagou.com/zhaopin" |
在线课程请点击文末原文链接:
Hellobi Live | R语言可视化在商务场景中的应用
往期案例数据请移步本人GitHub:
github.com/ljtyduyu/Da…
本文转载自: 掘金