我们这学期开设了数据采集课程,完全建立在R软件基础之上。在搜索相关资料过程中,发现关于R爬取的东西特别少,把提取部分分享到博客中希望可以帮助有缘人。
library(stringr)
library(RCurl)
library(XML)
在这里找到豆瓣电影所对应的链接https://movie.douban.com/top250?&filter=, 打开这个链接我们可以看到排行前25名的电影信息,top250的电影信息以同样的形式分布在10页上。
(1)提取一页的电影信息
在这里,我们以第一页为例,提取所需要的内容,首先是用readLines()函数读取整个网页。
url<-https://movie.douban.com/top250?&filter=
web<-readLines(url,encoding="UTF-8")
查看源代码我们可以知道,电影名字在标签<span class="title">…</span>中,用str_extract_all()函数进行筛选并把内容展开,程序如下:
name<- str_extract_all(string = web, pattern = '<spanclass="title">.+</span>')
movie.names_line<- unlist(name)
查看movie.names_line可以得到:
结果并不是太完美,接下来用正则表达式进行提取,并且删除空缺NA值,程序如下:
movie.names<- str_extract(string = movie.names_line, pattern =">[^&].+<") %>%
str_replace_all(string = ., pattern =">|<",replacement = "")
movie.names<- na.omit(movie.names)
这时候再次查看movie.names
[1] "肖申克的救赎" "霸王别姬" "这个杀手不太冷"
[4] "阿甘正传" "美丽人生" "千与千寻"
[7] "泰坦尼克号" "辛德勒的名单" "盗梦空间"
[10]"机器人总动员" "三傻大闹宝莱坞" "海上钢琴师"
[13]"忠犬八公的故事" "放牛班的春天" "大话西游之大圣娶亲"
[16]"楚门的世界" "龙猫" "教