rvest豆瓣电影爬取评分分析
今天写两篇好了, 免得过几天又要整理,…而且今天感觉爬虫复习了挺多的…用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写了, 免得画的时间更多了.