今天写两篇好了, 免得过几天又要整理,…而且今天感觉爬虫复习了挺多的…用R感觉比python好用多了啊…

关于豆瓣电影排名与时间的关系分析

从最简单的开始!

开爬!

这里做一个分析, 豆瓣电影的排名和年份有没有关系呢..

不多说 代码如下

library(rvest)

url = 'http://movie.douban.com/top250?format=text'
htmllist = paste("https://movie.douban.com/top250?start=",seq(0,225,25),"&filter=", sep = "")
count = 1
movie <- data.frame()
for(i in htmllist){
  web = html(i,encoding="UTF-8")
  score =  web %>% html_nodes(".rating_num") %>% html_text()

  year =  web %>% html_nodes(".bd p:nth-child(1)") %>% html_text()

  gy = gregexpr('[0-9]{4}',year)
  gd = gregexpr("导演",year)
  gz = gregexpr("主演",year)

  time = sapply(1:length(gy),function(i) substr(year[i],gy[[i]],gy[[i]]+attr(gy[[i]],'match.length')-1))
  time = time[2:length(time)]
  direct = sapply(1:length(gy),function(i) substr(year[i],gd[[i]] + 4,gz[[i]] - 4))
  direct = direct[2:length(direct)]
  actor = sapply(1:length(gy),function(i) substr(year[i],gz[[i]] + 4,gy[[i]] - 4))
  actor = actor[2:length(actor)]
  ga = gregexpr('\n',actor)
  actor = sapply(1:25,function(i) substr(actor[i],1,ga[[i]] - 4))

  names =   web %>% html_nodes(".title:nth-child(1)") %>% html_text()

  rates =  html_text(web %>% html_nodes(".rating_num~ span"))
  rates = rates[grep("人评价",rates)]
  rates = gsub("人评价","",rates)

  time <- as.Date(time, "%Y")
  score <- as.numeric(score)
  rates <- as.numeric(rates)
  movie <- rbind(movie, data.frame(names, time, score, rates, actor, direct, rank = count:(count+24)))
  count <- count+25
}
ggplot(movie, aes(time, rank)) + geom_point() + geom_smooth() + theme_bw(base_family = "Times")
ggplot(movie, aes(time, rank)) + geom_point() + geom_smooth(method = 'lm') + theme_bw(base_family = "Times")
ggplot(movie, aes(time, score)) + geom_point() + geom_smooth(method = "lm") + theme_bw(base_family = "Times")
ggplot(movie, aes(score, rank)) + geom_point() + geom_smooth(method = "lm") + theme_bw(base_family = "Times")
ggplot(movie, aes(rank, rates)) + geom_point() + geom_smooth(method = "lm") + theme_bw(base_family = "Times")
head(movie)

爬取了前10页也就是前225名的数据

分析结果

直接用lowess回归貌似看不到太大关系, 这里纵坐标是rank既排名, 横坐标是时间, 貌似看不到什么太大的关系…所以直接用线性回归


略微的上升趋势…., 既明显的排名随着时间下降, 因为rank1才是最高的…= = 不过这里90年代以前的数据比较少, 而90后的数据比较多, 所以90年前的排名高还是有一定的虚高, 毕竟确实存在一些经典拉升了排名, 幸存者效应.

看了排名这里直接拟合时间对评分

与之前类似, 评分随时间也下降= =

更加一般性的..
很明显的评分和排名的关系呢?

哈哈这个关系就比较明显了, 分数和排名很明显的正比关系, 给分越高, 越大的几率在排行榜上排的越高.

而对于评论人数

很明显的排名越高评论的人数越多, 感觉豆瓣的评分标准还是比较靠谱的= =


最后一个.. 人数还是90年代后的评论比较多- -可能这个评分随时间下降的关系与这个有关, 毕竟人多了评分可能就会下降的= =

好了就玩到这里吧, 其实还有些统计分析可以做的, 不过我要去看其他东西了= =明天貌似开始数模训练了…本来说用一下github, 不过队友的学习成本比较高, 而且现在还没完全弄透冲突解决的办法..就不用github写了, 免得画的时间更多了.