R网页采集:解决网页分页与网址超链接问题

浏览: 3352

作者:郑连虎,在数学学院取得理学学位的文科生,中国人民大学硕博连读生在读,山东大学管理学学士、理学学士

个人公众号:阿虎定量笔记

全文注释

# 本期以爬取猫眼电影为例,演示在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课程小程序

推荐 0
本文由 R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册