爬取商品评论

Reads: 2917 Edit

1 问题描述

多数网购网站的商品评论同样是以列表的形式展示,且往往存在多页的信息。除此之外,评论数据大多是动态网页,即需要用户交互,点击评论按钮来获取并显示数据。此时采用rvest包将无法爬取数据,需要借助RCurl包来爬取数据!

首先,我们先提取一个页面上的评论信息,接在再采用循环语句来提取多页的信息。只提取文字信息,不提取图像数据。

r-103

2 爬取京东商品的评论数据(动态网页)

2.1 爬取一个页面上的评论数据

安装并加载RCurl包

> install.packages('RCurl')
> library(RCurl)
> library(tidyverse)           #处理字符串    

定义该网页的网址

注意:网页评论的地址并不是商品网页的地址,需要采用如下形式获取网址信息。

第一步:打开浏览器的“检查元素”功能,切换到network选项。

r-104

第二步:刷新整个商品网页

第三步:点击页面上的商品评价按钮

r-105

第四步:点击“检查元素”工具栏以“productPageComments...”开头的条目(这一步不同购物网站不一样,需要尝试、摸索、寻找)。右侧的Request URL就是商品评价的网络地址信息。

r-106

> 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存放了具体的评论文本内容。如果数据量较大,可以将其保存到本地文件或者数据库中。


Comments

Make a comment