影戏喜好者的R函数
当前位置:以往代写 > 其他教程 >影戏喜好者的R函数
2019-06-14

影戏喜好者的R函数

影戏喜好者的R函数

作为一个伪影迷,常常纠结一些影戏该不应下,要不要看。究竟吾生也有涯而片源无涯。还好可以去豆瓣一类的处所看看各人的评分择优任命。去豆瓣查分需
要登录网站搜索再鼠标点点点,假如要查好几部影戏就有点费事儿。其实可以用R写个函数,先抓取相应的网页,再筛选返回需要的分值。这样在R里头就可以批量
查分了,恩,走起来。

library(RCurl)
library(XML)
movieScore <- function(x) {
    stopifnot(is.character(x))
    # 提交搜索豆瓣表单
    search <- getForm("http://movie.douban.com/subject_search", search_text = x)
    searchweb <- htmlParse(search)
    # 理会搜索功效页面
    resnodes <- getNodeSet(searchweb, "//div[@id='wrapper']//table[1]//a")
    if (is.null(resnodes)) 
        return(NULL) else resurl <- xmlGetAttr(resnodes[[1]], name = "href")
    # 获得影片页面后第二次理会
    resweb <- getURL(resurl, .encoding = "UTF-8")
    content <- htmlParse(resweb, encoding = "UTF-8")
    resnodes <- getNodeSet(content, "//div[@id='interest_sectl']//p[@class='rating_self clearfix']//strong")
    namenodes <- getNodeSet(content, "//div[@id='content']//h1//span")
    # 获得影片评分
    score <- xmlValue(resnodes[[1]])
    name <- xmlValue(namenodes[[1]])
    return(list(name = name, score = score))
}

看看天机这部大烂片几多分。

movieScore("天机")

## $name
## [1] "天机·富春山居图"
## 
## $score
## [1] "2.9"

抓网页较量慢,豆瓣为人民群众着想提供了API,我们也可以利用API来调取分数,函数也较量简朴。

library(RCurl)
library(XML)
library(RJSONIO)
movieScoreapi <- function(x) {
    api <- "https://api.douban.com/v2/movie/search?q={"
    url <- paste(api, x, "}", sep = "")
    res <- getURL(url)
    reslist <- fromJSON(res)
    name <- reslist$subjects[[1]]$title
    score <- reslist$subjects[[1]]$rating$average
    return(list(name = name, score = score))
}
movieScoreapi("僵尸世界大战")

## $name
## [1] "僵尸世界大战"
## 
## $score
## [1] 7.5

有了这个查分函数,我们可以在R中批量查阅影戏评分了。可是豆瓣对付频繁的会见会有限制,对付没有认证的API利用是每分钟10次,高出就会临时封IP。对付网页抓取,肖楠在第六次R集会会议上有个很棒的演讲,有乐趣的同学可以去看看。

    关键字:

在线提交作业