猫眼电影票房抓取

猫眼电影票房抓取

基本设置

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

次;