作者:郑连虎,在数学学院取得理学学位的文科生,中国人民大学硕博连读生在读,山东大学管理学学士、理学学士
个人公众号:阿虎定量笔记
全文注释
# 本期以爬取猫眼电影为例,演示在R语言网页爬虫实践中,分页网址与网址链接的处理。
# 初次使用R语言做网页爬虫任务,请阅读我的另外两篇推送:“rvest包爬虫入门”及“R语言正则表达式”,了解HTML标记语言、CSS层叠样式表、JavaScript脚本语言及正则表达式等背景知识,同时先练习使用R语言爬取豆瓣电影。
# 我们将借助谷歌浏览器插件SelectorGadget帮我们提取字段的标签属性。你可以在谷歌浏览器中免费获取该插件,其使用方法十分简单:打开网页,点击SelectorGadget,点选你需要的内容(标黄)并点掉不需要的内容(标红),那么需要提取的字段,其标签属性就自动显示供你复制到代码中,这比浏览网页源代码的方法高效许多;例如,借助SelectorGadget提取电影上映时间字段的标签属性:
# 完整代码的R文件,我在留言区给出下载地址。
任务
1 爬取猫眼电影网站上电影的上映时间
2 保存数据在本地
难点
1 分页形式,需要写循环语句批量爬取
2 上映时间需要点开网页链接才能看到,且包含汉语字符
代码
1 第一步,观察分页的网址规律,获取网址链接:
# 设置工作目录
setwd('D:/')
# 加载所需程序包
library('rvest')
library('stringr')
# 观察网址规律用for循环语句批量爬取数据
index <- c(0,30,60,90,120,150,180,210,240,270)
URL <- data.frame()
for (i in 1:length(index)){
web <- read_html(str_c('http://maoyan.com/films?showType=2&offset=',index[i]))
# 爬取超链接网址
link <- web%>%html_nodes('.movie-item-title a')%>%html_attrs()
url <- c(1:length(link))
for(i in 1:length(link))
url[i]<-link[[i]][1]
# 创建数据框存储以上信息
URL_data <- data.frame(url)
URL <- rbind(URL,URL_data)
}
URL
2 第二步,爬取信息并清洗保存:
# 抓取电影信息
movies <- data.frame()
for (i in 1:length(URL$url)){
pages <- read_html(str_c('http://maoyan.com',URL$url[i]))
# 爬取电影名
title <- pages%>%html_nodes('.movie-brief-container .name')%>%html_text()
# 爬取电影上映时间
time <- pages%>%html_nodes('.ellipsis~ .ellipsis+ .ellipsis')%>%html_text()
# 创建数据框存储以上信息
movies_data <- data.frame(title,time)
movies <- rbind(movies,movies_data)
}
movies
# 删除无关字符
movies$time <- str_replace_all(movies$time,'大陆上映','')
movies$time <- str_replace_all(movies$time,'大陆重映','')
# 把时间数据转换为日期格式
movies$time <- as.Date(movies$time)
# 导出为CSV文件
write.csv (movies,file="D:/movies.csv",row.names=FALSE)
——————————————
往期精彩:
天善智能清华教授团队亲自授课,打造人人都能上手的Python课程小程序