作者: 郑连虎 ,在数学学院取得理学学位的文科生,中国人民大学硕博连读生在读,山东大学管理学学士、理学学士
个人公众号:阿虎定量笔记
全文注释
# 本期以爬取猫眼电影为例,演示在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 课程 小程序
本文由R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。