初探 RSelenium —— 基于豆瓣电影的爬虫实例

本文基于 豆瓣电影 网站的爬虫实例, 对 RSelenium 包的使用做了初步的介绍。

使用 RSelenium 包可通过 R 实现对浏览器的自动控制,完成诸如“点击”,“输入”等操作,从而爬取动态页面,解放你的双手!

本文基于 豆瓣电影 网站的爬虫实例, 对 RSelenium 包的使用做了初步的介绍。

工具准备

  • JAVA:安装 JAVA
  • Selenium Server:下载 selenium-server-standalone-版本号.jar (本文使用的是 3.4.0 版本)
  • Chrome:安装 Chrome
  • ChromeDriver:下载 chromedrive.exe

注:下载的 chromedriver.exe 需放置在 Chrome 浏览器的安装目录下,即和 chrome.exe 放在同一个文件目录下。并将该目录添加入 环境变量 中。

一般 Chrome 的默认安装路径为:C:\Program Files (x86)\Google\Chrome\Application 。
1

  • SelectorGadget :[ 非必需 ] Chrome 扩展,可用于定位网页元素的 xpath 。不过,也可以用 Chrome 浏览器在网页右键选项卡中的“检查” 功能(快捷键:F12)。
  • 所需 R 包: RSelenium 包:实现对浏览器行为的自动控制 rvest 包:读取网页,定位网页元素并提取文本 stringr 包:利用正则表达式进行字符串处理。

Let’s do it !

本文以“鹿晗”作为关键词( 真爱粉们不要太较真 ),搜索其出演过的电影,最终整理出电影名、评分信息和评价人数表。

启动 Selenium Server

在所下载的 selenium-server-standalone-3.4.0.jar 文件目录下打开命令行,输入以下命令以启动Selenium Server :
2

你也可以把这个命令存成后缀为 .cmd 的文件放在该文件目录下,这样下次只需双击运行即可。

在 R 中连接 Server ,打开浏览器和目标网页
3

是不是发现,运行代码后自动启动了 Chrome ,并打开了 豆瓣电影 ?!有没有一点紧张和小刺激?!

定位网页元素,并向其传入参数

RSelenium 包可通过 name 、 id 、 class 、 css-selectors 、 xpath 对网页元素进行定位。本文尽可能多地采取不同的方法来展示如何使用它们。
4

可以看到,我们需要定位到搜索框。使用 SelectorGadget 或者浏览器的“检查”功能,得到该搜索框的 name 为 search_text 。

在定位到搜索框后,需要传入 keyword 并”回车“,从而实现搜索。

findElement :定位符合条件的网页元素

sendKeysToElement :传入参数
5

现在网页应该变成了”鹿晗“所出演的电影列表了。
6

读取网页,得到所需元素的文本

首先,我们定位到每一部电影。通过浏览器的“检查”功能,可以看出每部电影的 class=”pl2“ 。定位到每部电影之后,提取其中的信息即可。

  • getElementAttribute :得到网页信息

接下来就是静态网页的爬虫套路了,使用 rvest 包和 stringr 包里的函数即可。

  • read_html :读取网页
  • html_nodes :定位元素
  • html_text :得到元素文本
  • str_replace_all 、 str_extract :字符串处理
    7
    8

跳转到”下一页“,爬取所有页信息

将第一页的结果爬取完后,我们需要跳转到下一页,实现对所有搜索结果的爬取。

因此,需要判断还有多少页待爬取,遍历剩下的网页即可。
9

图中,”第二页”所对应的 xpath 为 //*[@id=”content”]/div/div[1]/div[3]/a ;”后页“所对应的 class=”next” ,我们使用 css-selectors 定位到它。

findElements :定位所有符合条件的网页元素

clickElement :点击
10

后续工作

当爬取了所有网页的信息之后,我们应当对结果进行整理,并储存。同时,关闭进程,退出浏览器。

quit :关闭进程,退出浏览器
11

部分爬取结果如下图所示:
12

题外话

我们再做点有意思的工作~

本文为专栏文章,来自:数据工匠,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/48111.html 。

(0)
数据工匠的头像数据工匠专栏
上一篇 2017-09-11 17:18
下一篇 2018-05-10 21:45

相关文章

  • 如何更有价值采集数据、高效分析数据?

    本文将从数据采集的三大要点、如何让分析更有价值更高效、以及数据分析思维三部分展开聊。

    2016-11-30
    0
  • R语言中离群值的识别、描述、绘制与移除

    统计学中离群值被定义为离开大部分观测较远的样本点,多数是由于测量误差而产生。因此,数据分析中离群值的识别和移除(如有必要)是很重要的一个步骤。

    2016-05-24
    0
  • 产品经理如何通过数据分析来发现用户的“怒点”?

    什么才是我们需要关注的“怒点”?产品经理如何发现并修正“怒点”呢?

    2016-06-02
    1
  • 数据领域最强编程语言Python和R要合作了!

    是的,你没有看错,数据科学领域从业者最离不开的两大编程语言,当红炸子鸡 Python 和“过气网红”R 真的要展开合作了。近日,URSA 实验室宣布,R 和 Python 正携手合作,旨在让使用不同编程语言的数据科学家能够更轻松地协作,避免不同语言开发人员的过多重复工作,这或许会成为今年最雄心勃勃的交叉事件。有网友对这次合作发表评论道:“这个真的蛮历史性时刻的”,不过也有网友调侃“两个最慢的语言正在合作”,你怎么看?

    2018-05-10
    2
  • 支付风控数据仓库建设

    作者|凤凰牌老熊 这篇文章是支付风控系统设计的第二篇,重点介绍支持支付风控的数据仓库建设。关于支付系统在风控上的具体需求,参见上一篇文章支付风控场景分析。 支付系统的风控分析需要大量的数据支撑。本文从名单、画像和图谱三个层面,分析在支付系统建设的不同阶段如何建立支持风控计算的数据仓库,详细介绍从什么地方采集数据、如何采集数据、以及如何存储这些数据。 支付风控…

    2022-01-11
    0
关注我们
关注我们
分享本页
返回顶部