R语言的第一个爬虫实践
近期在学习R语言时遇到了网络爬虫的作业,经过不懈的努力,终于写好了小编的第一个网络爬虫,希望对你有所帮助,小编是个初学者,也是第一次写博客,不足之处还请多多指教。
这里爬取豆瓣2019年一部电影评论,并形成词云图。
需要准备的工具
谷歌浏览器。
选取要爬的电影
打开豆瓣 任意选取一部电影点开评论,然后点击右上角放大镜一样的logo,再点击全部评论(需要安装相关的插件请自行百度);
以摩登家庭为例
1.
2.
3.
4.
5.点击看过后,会出现多个黄色的框框,将鼠标停在任意一条评论上会出现以下的字母 p span 记住这个字母(原谅小编的涂鸦^ _^)
把此时浏览地址栏的地址复制下来,如果不爬取其他的内容可以先关闭chrome浏览器。
程序如下
导入必不可少的包
install.packages("rvest")
install.packages("httr")
rvest 是爬取静态网页常用的包,读者可以自行学习。其中的函数小编是通过别人的博客了解的,需要的可以安利一波 https://blog.csdn.net/weixu22/article/details/79237512
httr 的详解参考另一个大佬的总结 https://blog.csdn.net/qq_38984677/article/details/81610436
(感谢各位大佬的总结,如果有帮助到你请顺手点个赞)
画词云图相关的包
画词云图很灵活,不一定要这么多包
#install.packages("xml2")
#install.packages("RCurl")
#install.packages("jiebaRD")
#install.packages("jiebaR")
#install.packages("data.table")
#install.packages("stringr")
#install.packages("rJava")
#install.packages("RColorBrewer")
#install.packages("devtools")
#install.packages("wordcloud2")
#install.packages("Rwordseg")
#install.packages("readxl")
正常情况下都可以直接下载
这些包都是画词云图常用的,这里不再赘述
加载相关的包
#library(xml2)
library(rvest)
#library(RCurl)
#library(jiebaRD)
#library(jiebaR)
#library(data.table)
#library(stringr)
#library(rJava)
#library(Rwordseg)
#library(RColorBrewer)
#library(Rwordseg)
#library(wordcloud2)
#library(readxl)
library(httr)
编写自定义函数,实现网址的拼接
get <- function(i){
t<-'30454227' #豆瓣上电影编号,通过复制的网址可以看到每一部电影的编号都不同
t1 <- 'https://movie.douban.com/subject/' #豆瓣固定的网址前部分
t2 <- '/comments?start=' #设置开始页
t3 <- '&limit=20&sort=new_score&status=P' #设置每页20条评论
url<-paste0(t1,t,t2,i,t3) #拼接网址,实现翻页的功能
return(url)
}
由于一个页面只有20条评论,通过一个循环得到多个页面的评论
n <- 50 #设置爬取评论条数
for(i in 0:(n-1)){
web<-get(i) #调用函数得到不同的网址
webpages <- read_html(web) #开始爬取数据
#获取网页数据
data<-html_nodes(webpages,'p span') #上面调用插件时代表评论框的字母 p span
data<-html_text(data_html) #爬到的文本数据
#print(data) #主要看是不是在开始爬取了,不需要可以省略
Sys.sleep(1)
}
开始分词处理
停用词表可以到CSDN下载,如果没有币的话,小编的仅供参考**
百度网盘:https://pan.baidu.com/s/1bTdrcQjso40rIL3fXKI59Q
提取码:dr7b
p=worker(stop_word1="E:/StopWords.text") #加载停用词表
seg<-segment(data,p) #初步分词处理
#去除特殊的词
seg <- gsub("\n","", seg) #删除掉换行的
seg <- gsub(" ","", seg) #删除掉空格
seg<- gsub("[0-9]+?","",seg) #去除数字
seg <- gsub("导演","",seg)
seg <- gsub("主演","",seg)
seg <- gsub("类型","",seg)
seg <- gsub("地区","",seg)
seg <- gsub("片长","",seg)
seg <- gsub("上映","",seg)
seg <- gsub("\\(","",seg)
seg <- gsub("\\)","",seg)
seg <- gsub("https","",seg) #去除网址
seg <- gsub("www","",seg)
seg<- gsub("a-zA-Z","",seg) #去除字母
进一步处理,
按词频画词云图
#开始统计词频
seg<-table(unlist(seg))
seg<-rev(sort(seg))
seg<-data.frame(seg)
seg<-subset(seg,nchar(as.character(seg))>1) #过滤掉只有一个字的词
seg30=subset(seg,seg$Freq>=1) #按词频进行过滤
wordcloud2(seg30,shape = 'star',size =0.5) #根据结果形成词云图
最终结果
创作不易,如果对你有帮助,请顺手点个赞,万分感谢