豆瓣电影好像刚刚改版了,原来最简单的爬虫方式现在也不灵了。附上原来在windows系统中的R爬虫代码,有大神指教一下怎么改嘛?感激不尽
这是现在的页面
library(dplyr)
library(rvest)
library(stringr)
# 自定义函数
getMovList <- function(pgnum, intv_time=5){
# 采集单个电影链接的列表的函数
# pgnum是页面数量, intv_time是间隔时间
# 首先设置一个空向量
list_res <- as.character()
for(i in 0:pgnum){
urlnum <- i*20
list_url <- str_c('https://movie.douban.com/explore#!type=movie&tag=%E5%8D%8E%E8%AF%AD&sort=time&page_limit=20&page_start=',
urlnum, '&type=R')
# 按照 css标签确定爬虫内容
list_p <- read_html(list_url) %>% html_nodes('div.list') %>% html_attr('href') %>% .[str_detect(., 'https://movie.douban.com/subject')]
# 单个页面上的url列表添加到总列表中
list_res <- c(list_res, list_p)
Sys.sleep(intv_time)
cat('page', i, 'Done ')
}
list_res <- unique(list_res)
return(list_res)
}
getMovData <- function(url){
# 根据单个电影url,采集具体信息
# 目前初步设定 标题、年份、信息、剧情、评分等字段,可进一步优化
prs <- read_html(url)
title <- prs %>% html_nodes('h1 span') %>% html_text() %>% .[1]
year <- prs %>% html_nodes('h1 span.year') %>% html_text() %>% str_remove_all('\\(|\\)')
info <- prs %>% html_nodes('#info') %>% html_text() %>% str_trim()
if(length(info)==0) info <- ''
des <- prs %>% html_node('#link-report') %>% html_text() %>% str_trim() %>% .[1]
if(length(des)==0) des <- ''
Point<- prs %>% html_nodes(".rating_num")%>%html_text()%>%as.numeric()
if(length(Point)==0) Point <- ''
Popularity<- prs %>% html_nodes(".rating_people")%>%html_text()%>%as.character()
if(length(Popularity)==0) Popularity <- ''
res <- data.frame(title, year, info, des, Point, Popularity,
stringsAsFactors = F)
return(res)
}
##### 采集数据
# 获取电影列表
url_lists <- getMovList(pgnum = 5)
url_lists
# 获取具体信息
mov_df <- tibble()
for(i in 1:length(url_lists)){
mov_df <- bind_rows(mov_df, getMovData(url_lists[i]))
Sys.sleep(0.5)
cat('movie', i, 'Done ')
}
write.csv(mov_df, 'D:\\mov.csv')