1 问题描述
多数网购网站的商品评论同样是以列表的形式展示,且往往存在多页的信息。除此之外,评论数据大多是动态网页,即需要用户交互,点击评论按钮来获取并显示数据。此时采用rvest包将无法爬取数据,需要借助RCurl包来爬取数据!
首先,我们先提取一个页面上的评论信息,接在再采用循环语句来提取多页的信息。只提取文字信息,不提取图像数据。
2 爬取京东商品的评论数据(动态网页)
2.1 爬取一个页面上的评论数据
安装并加载RCurl包
> install.packages('RCurl')
> library(RCurl)
> library(tidyverse) #处理字符串
定义该网页的网址
注意:网页评论的地址并不是商品网页的地址,需要采用如下形式获取网址信息。
第一步:打开浏览器的“检查元素”功能,切换到network选项。
第二步:刷新整个商品网页
第三步:点击页面上的商品评价按钮
第四步:点击“检查元素”工具栏以“productPageComments...”开头的条目(这一步不同购物网站不一样,需要尝试、摸索、寻找)。右侧的Request URL就是商品评价的网络地址信息。
> url='https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100031406046&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'
说明:该网址中有“fetchJSON”的字样,因而其请求的不是html的网页内容,而是JSON数据文件(JSON是存放数据的一种文件格式)。
getURL()函数请求数据信息
> web=getURL(url,.encoding='GBK')
说明:这里是GBK的编码格式。
将getURL()获取的数据转换为标准的JSON格式
> web=substr(web,nchar("fetchJSON_comment98")+2,nchar(web)-2)
> JSONData=jsonlite::fromJSON(web)
说明:"fetchJSON_comment98"来自网址的内容。JSONData就是包含最终获取的评论信息的变量。
评价的打分数据:
> JSONData$comments$score
[1] 5 5 5 5 5 5 5 5 5 5
> JSONData$comments$content %>% str_remove_all("\\n") %>% str_remove_all(" ")
[1] "手机手感很好,颜值也高!皮的后盖很舒服,没感觉很重。不发热,相机清晰,系统流畅!充电又快,完美"
说明:这里仅显示了第一条评论的内容。
2.2 采用循环语句爬取多个页面上的评论数据
从网页中可以看出,一共有5万+的评论信息,我们这里只演示提取前20页的评论数据。
在前面获取的评论网站地址中,“page=0”表示提取第1页的评论信息。我们可以在前面网址的基础上构造“page=1”、“page=2”,...来获取第2页,第3页等的评论信息!
goodsComment=NULL
goodsScore=NULL
for(i in 0:20){
url = paste0('https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100031406046&score=0&sortType=5&page=',i,'&pageSize=10&isShadowSku=0&fold=1')
web=getURL(url,.encoding='GBK')
web=substr(web,nchar("fetchJSON_comment98")+2,nchar(web)-2)
JSONData=jsonlite::fromJSON(web)
comment=JSONData$comments$content %>% str_remove_all("\\n") %>% str_remove_all(" ")
score=JSONData$comments$score
goodsComment=c(goodsComment,comment)
goodsScore=c(goodsScore,score)
}
说明:该部分代码在脚本中编写并运行。paste0()函数是构造网址的主要函数。
> goodsScore
[1] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 3 5 5
[43] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
[85] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
[127] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
[169] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
说明:运行循环语句脚本后,可以在控制台输入goodsScore查看前20页商品的评价得分;同理,goodsComment存放了具体的评论文本内容。如果数据量较大,可以将其保存到本地文件或者数据库中。