猫眼电影票房抓取
基本设置
library(RSelenium)
library(stringr)
setwd("C:\\RSelenium")
######## 初始化浏览器####
remDr <- remoteDriver(
browserName = "chrome", # 浏览器可以自己设置firefox、chrome、phantomjs(要配置)
remoteServerAddr = "localhost",
port = 4444L)
remDr$open() # 打开浏览器
#> [1] "Connecting to remote server"
#> $applicationCacheEnabled
#> [1] FALSE
#>
#> $rotatable
#> [1] FALSE
#>
#> $mobileEmulationEnabled
#> [1] FALSE
#>
#> $networkConnectionEnabled
#> [1] FALSE
#>
#> $chrome
#> $chrome$chromedriverVersion
#> [1] "2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7)"
#>
#> $chrome$userDataDir
#> [1] "C:\\Users\\zsc\\AppData\\Local\\Temp\\scoped_dir10136_5944"
#>
#>
#> $takesHeapSnapshot
#> [1] TRUE
#>
#> $pageLoadStrategy
#> [1] "normal"
#>
#> $databaseEnabled
#> [1] FALSE
#>
#> $handlesAlerts
#> [1] TRUE
#>
#> $hasTouchScreen
#> [1] FALSE
#>
#> $version
#> [1] "67.0.3396.99"
#>
#> $platform
#> [1] "Windows NT"
#>
#> $browserConnectionEnabled
#> [1] FALSE
#>
#> $nativeEvents
#> [1] TRUE
#>
#> $acceptSslCerts
#> [1] FALSE
#>
#> $acceptInsecureCerts
#> [1] FALSE
#>
#> $locationContextEnabled
#> [1] TRUE
#>
#> $webStorageEnabled
#> [1] TRUE
#>
#> $browserName
#> [1] "chrome"
#>
#> $takesScreenshot
#> [1] TRUE
#>
#> $javascriptEnabled
#> [1] TRUE
#>
#> $cssSelectorsEnabled
#> [1] TRUE
#>
#> $setWindowRect
#> [1] TRUE
#>
#> $unexpectedAlertBehaviour
#> [1] ""
#>
#> $webdriver.remote.sessionid
#> [1] "4b56b8063909582c3c83ee6449cee0da"
#>
#> $id
#> [1] "4b56b8063909582c3c83ee6449cee0da"
url="https://www.baidu.com/"
remDr$navigate(url) # 打开网页
Sys.sleep(10)#由于网络原因,把时间设置多一点
百度页面搜索
###########################进行搜索关键词
##### 按属性--属性值搜索 ,可以是css,xpath ,id ,属性等 对应值
## 注意findElement 和 findElements 的区别
webElem <- remDr$findElement(using = 'css', "#kw") # 找到这个元素--进行搜索关键词
webElem$sendKeysToElement(list("猫眼",key="enter")) # 输入关键词并提交
Sys.sleep(10)
#### 获取当前页面的所有标题,每个链接的标题都包含在<h3 class = "t">标签中。我们将h3首先访问标题
#### 注意 findElements和 findElement方法是获取一个或者多个的区别
webElems <- remDr$findElement(using = 'css', "h3.t a")
webElems$getElementText() # 获取当前选中的节点的标题,有一些时候有广告等不能保证每次都在第一个节点
#> [[1]]
#> [1] "猫眼专业版-实时票房"
webElems$getElementAttribute("href") # 获取当前选中的节点属性
#> [[1]]
#> [1] "http://www.baidu.com/link?url=YDvi2e0Yjs1ptfGCxgkewv3E6DgGgwTHPjfAKJfBE5EU9Sa8WA-xbHh_hcKN7bjC"
webElems$clickElement() # 点击此元素
Sys.sleep(10)
页面跳转–点击操作
###########窗口页面跳转
remDr$getCurrentUrl()# 可以看出当前页面还是百度的页面,并没有跳转到猫眼页面
#> [[1]]
#> [1] "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E7%8C%AB%E7%9C%BC&rsv_pq=acd1c97500015f3c&rsv_t=0cc2OOqo%2BlNoq457a3mkHEq4etPV2GyS5BTIhno4%2FV7JnkZ9Vnp2acwulq8&rqlang=cn&rsv_enter=1&rsv_sug3=2&rsv_sug2=0&inputT=54&rsv_sug4=55"
remDr$getCurrentWindowHandle()# 查看当前属于哪个窗口页面
#> [[1]]
#> [1] "CDwindow-8F6C1A2636C0DA716E6C8C75C865B191"
remDr$getTitle()# 当前窗口页面的标题
#> [[1]]
#> [1] "猫眼_百度搜索"
remDr$getWindowHandles() # 获取当前浏览器所有的窗口页面
#> [[1]]
#> [1] "CDwindow-8F6C1A2636C0DA716E6C8C75C865B191"
#>
#> [[2]]
#> [1] "CDwindow-2C1F3D52E7A8D15E93073535B5699ACA"
Sys.sleep(10)
## 现在进行页面跳转
### 这有两个窗口时,可以直接排除跳转,如有多个窗口,一般输入窗口代码进行跳转
currWin <- remDr$getCurrentWindowHandle() # 当前窗口
allWins <- remDr$getWindowHandles() # 所有窗口,这里只有两个
otherWindow <- as.character( setdiff(allWins,currWin) ) # 排除当前窗口,获取其他窗口
remDr$switchToWindow(otherWindow) # 窗口跳转函数,若其他窗口有多个,需要指定一个
remDr$getCurrentUrl()
#> [[1]]
#> [1] "http://piaofang.maoyan.com/dashboard"
remDr$getTitle()# 跳转成功
#> [[1]]
#> [1] "500 Internal Privoxy Error"
Sys.sleep(10)
页面信息抓取
remDr$maxWindowSize()# 窗口最大化--有时要
library(rvest)
library(stringr)
# 提取当前页面的源代码
webpage=read_html(remDr$getPageSource()[[1]],encoding = "utf-8")
# 提取电影的名字,当节点有很多时,但每个节点的属性只提取 一个时,可以用html_attr()函数
title <- webpage %>% html_nodes("table.dashboard-table td.moviename-td") %>% html_attr("title")
title
#> [1] "我不是药神"
#> [2] "邪不压正"
#> [3] "新大头儿子和小头爸爸3:俄罗斯奇遇记"
#> [4] "阿修罗"
#> [5] "超人总动员2"
#> [6] "动物世界"
#> [7] "小悟空"
#> [8] "侏罗纪世界2"
#> [9] "神奇马戏团"
#> [10] "风语咒"
#> [11] "幸福马上来"
#> [12] "您一定不要错过"
#> [13] "美丽童年"
#> [14] "阿飞正传"
#> [15] "天佑之爱"
#> [16] "第七个小矮人"
#> [17] "猛虫过江"
#> [18] "金蝉脱壳2"
#> [19] "冰雪女王2:冬日魔咒"
#> [20] "细思极恐"
#> [21] "出·路"
#> [22] "龙虾刑警"
## XML组件提供了网页采集链接 列表 和表格的便利函数
## 对应 : getHTMLLinks() readHTMLList() readHTMLTable()
##### rvest 包 只提供了网页采集 表格的便利函数-- html_table(trim=T,header=T)
# 提取商品的简介信息 ,若class属性有多个值时,只用一个即可
Sys.sleep(10)
xinxi <- webpage %>% html_nodes("table.dashboard-table") %>% html_table(header = F,trim=T)
data = xinxi[[2]]
names(data) = xinxi[[1]]
data ## 如果要循环则翻页即可,而且由于此页面是实时更新的,所以只能获取当前时刻的,其中<U+00A0>为空字符
#> 影片 (点击 优先展示)
#> 1 01我不是药神上映11天<U+00A0><U+00A0>24.08亿
#> 2 02邪不压正上映3天<U+00A0><U+00A0>2.82亿
#> 3 03新大头儿子和小头爸爸3:俄罗斯奇遇记上映10天<U+00A0><U+00A0>1.16亿
#> 4 04阿修罗上映3天<U+00A0><U+00A0>4593.8万
#> 5 05超人总动员2上映24天<U+00A0><U+00A0>3.39亿
#> 6 06动物世界上映17天<U+00A0><U+00A0>4.80亿
#> 7 07小悟空上映2天<U+00A0><U+00A0>559.1万
#> 8 08侏罗纪世界2上映31天<U+00A0><U+00A0>16.64亿
#> 9 09神奇马戏团点映<U+00A0><U+00A0>50.8万
#> 10 10风语咒点映<U+00A0><U+00A0>73.4万
#> 11 11幸福马上来上映38天<U+00A0><U+00A0>9280.0万
#> 12 12您一定不要错过上映10天<U+00A0><U+00A0>477.9万
#> 13 13美丽童年上映3天<U+00A0><U+00A0>98.2万
#> 14 14阿飞正传上映21天<U+00A0><U+00A0>1888.6万
#> 15 15天佑之爱上映3天<U+00A0><U+00A0>26.0万
#> 16 16第七个小矮人上映30天<U+00A0><U+00A0>2545.8万
#> 17 17猛虫过江上映31天<U+00A0><U+00A0>2.03亿
#> 18 18金蝉脱壳2上映17天<U+00A0><U+00A0>9077.1万
#> 19 19冰雪女王2:冬日魔咒2016-12<U+00A0><U+00A0>3565.2万
#> 20 20细思极恐上映10天<U+00A0><U+00A0>105.6万
#> 21 21出·路重映21天<U+00A0><U+00A0>32.5万
#> 22 22龙虾刑警上映24天<U+00A0><U+00A0>6865.6万
#> 综合票房(万) 票房占比 排片场次 排片占比 场均人次 上座率
#> 1 10718.21 54.9% 133823 45.6% 24 17.2%
#> 2 5548.16 28.4% 93891 32.0% 17 13.0%
#> 3 1049.08 5.3% 16284 5.5% 19 19.9%
#> 4 753.19 3.8% 22813 7.7% 10 11.3%
#> 5 391.33 2.0% 4074 1.3% 29 28.1%
#> 6 321.86 1.6% 5207 1.7% 17 18.6%
#> 7 264.19 1.3% 9186 3.1% 10 11.8%
#> 8 240.23 1.2% 3833 1.3% 19 24.6%
#> 9 50.82 0.2% 256 <0.1% 53 53.7%
#> 10 32.82 0.1% 159 <0.1% 47 58.8%
#> 11 17.09 <0.1% 91 <0.1% 55 53.3%
#> 12 14.71 <0.1% 445 0.1% 12 14.4%
#> 13 10.27 <0.1% 124 <0.1% 23 46.5%
#> 14 7.20 <0.1% 316 0.1% 7 11.8%
#> 15 5.33 <0.1% 290 <0.1% 8 17.4%
#> 16 2.76 <0.1% 68 <0.1% 14 14.1%
#> 17 2.69 <0.1% 317 0.1% 3 7.6%
#> 18 2.35 <0.1% 607 0.2% 2 3.9%
#> 19 2.08 <0.1% 24 <0.1% 26 21.6%
#> 20 1.65 <0.1% 445 0.1% 2 3.4%
#> 21 1.60 <0.1% 10 <0.1% 50 90.7%
#> 22 1.07 <0.1% 142 <0.1% 3 4.9%
R版本已经本地环境
sessionInfo()
#> R version 3.5.1 (2018-07-02)
#> Platform: x86_64-w64-mingw32/x64 (64-bit)
#> Running under: Windows 10 x64 (build 16299)
#>
#> Matrix products: default
#>
#> locale:
#> [1] LC_COLLATE=Chinese (Simplified)_China.936
#> [2] LC_CTYPE=Chinese (Simplified)_China.936
#> [3] LC_MONETARY=Chinese (Simplified)_China.936
#> [4] LC_NUMERIC=C
#> [5] LC_TIME=Chinese (Simplified)_China.936
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] rvest_0.3.2 xml2_1.2.0 stringr_1.3.1 RSelenium_1.7.3
#>
#> loaded via a namespace (and not attached):
#> [1] Rcpp_0.12.17 knitr_1.20 magrittr_1.5 R6_2.2.2
#> [5] httr_1.3.1 caTools_1.17.1 tools_3.5.1 binman_0.1.0
#> [9] selectr_0.4-1 semver_0.2.0 htmltools_0.3.6 openssl_1.0.1
#> [13] yaml_2.1.19 rprojroot_1.3-2 digest_0.6.15 assertthat_0.2.0
#> [17] bitops_1.0-6 curl_3.2 evaluate_0.10.1 wdman_0.2.2
#> [21] rmarkdown_1.10 stringi_1.2.3 compiler_3.5.1 backports_1.1.2
#> [25] XML_4.0-0 jsonlite_1.5