楼主: Tabl
928 4

[新手尝试] R初试爬取豆瓣电影 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

小学生

21%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
33 点
帖子
2
精华
0
在线时间
8 小时
注册时间
2018-10-24
最后登录
2019-12-25

楼主
Tabl 发表于 2018-11-14 20:11:08 |只看作者 |坛友微信交流群|倒序 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
ls()
rm(list=ls())

library(xml2)
library(rvest)
library(stringr)

for (j in 0:9){
  if(j==0){
url <- 'https://movie.douban.com/top250'
  } else{
url <- paste('https://movie.douban.com/top250?start=',25*j,'&filter',sep="")
}


webpage <- read_html(url)    #xml2
#排名
rank_data_html <- html_nodes(webpage,'em')  #rvest
rank_data <- html_text(rank_data_html)     #rvest
rank_data <- as.numeric(rank_data)
#电影名
title_data_html <- html_nodes(webpage,'.title:nth-child(1)')
title_data <- html_text(title_data_html)
#评分
score_data_html <- html_nodes(webpage,'.rating_num')
score_data <- html_text(score_data_html)
score_data <- as.numeric(score_data)
#评价人数
counter_data_html <- html_nodes(webpage,'.star:nth-child(2)')
counter_data <- html_text(counter_data_html)
counter_data <- unlist(str_extract_all(counter_data,"[0-9]+")) #stringr
a <- length(unlist(str_extract_all(counter_data,"[0-9]+")))
counter_data <- counter_data[seq(3,a,3)]
counter_data <- as.numeric(counter_data)
counter_data
#描述
description_data_html <- html_nodes(webpage,'.inq')
description_data <- html_text(description_data_html)

gener_data_html <- html_nodes(webpage,'.bd p:nth-child(1)')
gener_data <- html_text(gener_data_html)
gener_data <- gener_data[-1]
#年份
year_data <- NULL
for(i in 1:length(gener_data)){
  year_data[i] <- unlist(str_extract_all(gener_data[i],"[0-9]+"))[1]
}


#取导演数据
directors_data <- NULL
for(i in 1:length(gener_data)){
n1 <-str_trim(strsplit(gener_data[i],'\n')[[1]][2])
n2 <- regexpr("\\s{3}",n1)
directors_data[i] <- substr(n1,5,n2-1)
}

#取主演数据
actors_data <- NULL
for(i in 1:length(gener_data)){
  n1 <- regexpr("主",strsplit(gener_data[i],'\n')[[1]][2])
  n2 <- nchar(strsplit(gener_data[i],'\n')[[1]][2])
  actors_data[i] <- substr(strsplit(gener_data[i],'\n')[[1]][2],n1+4,n2)
}

#取国家数据
country_data <- NULL
for(i in 1:length(gener_data)){
  a<-strsplit(gener_data[i],'\n')[[1]][3]
  n1 <- length(unlist(gregexpr("\\s\\/\\s",a)))
  n2 <- unlist(gregexpr("\\s\\/\\s",a))[n1]
  n3 <- unlist(gregexpr("\\s\\/\\s",a))[n1-1]
  country_data[i] <- substr(a,n3+3,n2-1)
}

#取类型
style_data <- NULL
for(i in 1:length(gener_data)){
  a<-strsplit(gener_data[i],'\n')[[1]][3]
  n1 <- length(unlist(gregexpr("\\s\\/\\s",a)))
  n2 <- unlist(gregexpr("\\s\\/\\s",a))[n1]
  n3 <- unlist(gregexpr("\\s\\/\\s",a))[n1-1]
  style_data[i] <- substr(a,n2+3,nchar(a))
  }

if(j== 0){
rank =rank_data
title = title_data
score = score_data
description = description_data
year =year_data
country=country_data
directors=directors_data
actors=actors_data
style=style_data
counter =counter_data} else{
rank =c(rank,rank_data)
title = c(title,title_data)
score = c(score,score_data)
description = c(description,description_data)
year =c(year,year_data)
country=c(country,country_data)
directors=c(directors,directors_data)
actors=c(actors,actors_data)
style=c(style,style_data)
counter =c(counter,counter_data)
}}

for (i in 250:215){
  description[i]=description[i-1]
}
description[215] <- ""
film.data1 <- data.frame(排名 = rank,电影名 = title,评分=score,
                           简介 =description,上映年份 = year,
                           国家=country, 导演 = directors,
                           主演=actors,题材 = style,评价人数=counter)

write.csv(film.data1,"豆瓣电影top250.csv",row.names = FALSE)


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
r9205009 发表于 2018-11-14 21:19:34 |只看作者 |坛友微信交流群
休闲区(12区),包含: 休闲灌水、跳蚤市场、情感交友、灌水吧、一带一路,5大分版
欢迎您来本区多发表文章,意见或想法(需依论坛相关规范)或发售有用或稀缺之书籍,信息或发表生活感言,将会获得相对论坛币或其他奖励
关注微信送论坛币    https://bbs.pinggu.org/thread-2192087-1-1.html
推广论坛赚取论坛币 https://bbs.pinggu.org/home.php?mod=spacecp&ac=promotion
多种方式赚取论坛币:https://bbs.pinggu.org/home.php?mod=spacecp&ac=main
会员权限赠送论坛币  https://bbs.pinggu.org/buy.php
增加论坛币的方法 论坛制度一览表
https://bbs.pinggu.org/thread-397905-1-1.html

使用道具

藤椅
cocoqiqi 发表于 2018-11-15 10:48:45 |只看作者 |坛友微信交流群
这个怎么用?

使用道具

板凳
Tabl 发表于 2018-11-17 18:48:19 |只看作者 |坛友微信交流群
cocoqiqi 发表于 2018-11-15 10:48
这个怎么用?
直接放在R里执行,操作时没有截图

使用道具

报纸
人大黄某 发表于 2018-11-21 11:06:18 |只看作者 |坛友微信交流群
咋不用Python,会更方便些

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 04:17