美文网首页我的收藏@IT·互联网程序员
R语言学习:抓取天猫评价,以及制作词云图

R语言学习:抓取天猫评价,以及制作词云图

作者: 无鱼二饼 | 来源:发表于2017-03-12 00:05 被阅读1334次

在上期学习笔记中,记录了使用rvest包抓取宝贝搜索结果页的过程,其中记录了宝贝ID和sellerID。这次学习使用宝贝ID和sellerID抓取评价。

分析宝贝评价页面结构

上个月刚承老婆大人赏了台Mate9,这次试试看能不能抓到Mate9的评价。

  • 打开Mate 9的宝贝页面,记得打开F12(浏览器开发工具),先选到"网络"项目。
  • 打开网页上的"累计评价",观察打开此页面后,网页进行了哪些网络请求。
  • 评价数据应该不少,找个最大的,把网址复制下来,用浏览器打开一看,哈哈,评价内容果然在里面。(谢谢猫爹!这个要想保密真不是啥难事。顺便给阿里云镜像打个广告,资源挺好的)

该链接返回的是JSON格式的数据,其特点是所有数据都是按照Key:Value的键:值对的形式保存的。Key保存该数据的名称,Value保存值。只是Value值的类型千变万化,啥都可以存。
把返回的JSON数据处理一下,大致能看到对咱们有用的数据主要有:lastPage评价的总页数,page当前的页数,以及rateList中保存的当前页的评价记录。

https://rate.tmall.com/list_detail_rate.htm?itemId=540677983314&spuId=707705213&sellerId=2838892713&order=3&currentPage=1&append=0&content=1&tagId=&posi=&picture=&ua=103UW5TcyMNYQwiAiwTR3tCf0J%2FQnhEcUpkMmQ%3D%7CUm5Ockt%2BSnVMcUt%2FQ39BfSs%3D%7CU2xMHDJ%2BH2QJZwBxX39RaVV7W3UpSC5CJVshD1kP%7CVGhXd1llXGldYltmXGhUaFZqXWBCeExxRXFPcE14QH9EfEl8RWs9%7CVWldfS0SMg03DS0RLg4gWmJSYkZiXy4QfkA1G00b%7CVmhIGCwWNgsrFyMeIAA5BD4KKhYiHSAAPAE0CSkVIR4jAz8COwZQBg%3D%3D%7CV25OHjAePgYyDy8UKBw8BDwFPWs9%7CWGFBET8RMQs0DCwWKBw8AD0DPQZQBg%3D%3D%7CWWBAED5bMlYyagduFX4eMBAsEC8XNwg9HSYfIxwncSc%3D%7CWmNDEz19KWIfYhlHAS8POwc%2FHyMZIBg4AzYNMgheCA%3D%3D%7CW2JCEjwSMgc7Di4SKRYsDDcDPgU%2BaD4%3D%7CXGVFFTteN1YwTjVcJQsrECQdPQE1DjMTKRAvES95Lw%3D%3D%7CXWVFFTsVNWVQbVBwTHRBe1thX2FDe1tnU2pIdEB0QHRPe0J3SHFOcVFtU25OckocPAEhDyEBOwA1ATRiNA%3D%3D%7CXmdHFzl5LXQZZgdqFG5AYFthX39DeU1zU2lTZlNuOG4%3D%7CX2ZbZkZ7W2REeEF9XWNbYUF4WGRZeU1tWHhCYll5QWFdY0N9Kw%3D%3D&isg=AhwcqzXoqOvxDFxK0_jFBVci7DoAO8C_03_Q5vYcaoflQb3LHqawT1uz1xJW&needFold=0&_ksTS=1489240871266_2014&callback=jsonp2015

这个链接真的好长啊,不过没事,咱们记住,一般像这种https://rate.tmall.com/list_detail_rate.htm?... "?"问号后面跟着的大都是参数,参数和参数之间用”&“分隔。然后试一下就发现这个长长的链接可以简化一下。只需要三个参数就可以返回查询结果了,itemId,sellerId和currentPage

https://rate.tmall.com/list_detail_rate.htm?itemId=540677983314&sellerId=2838892713&currentPage=1
  • 好了,现在可以抓取评价记录了。代码如下
getAllRate <- function(itemId,sellerId){
# 按商品ID和sellerId抓取评价
    # 定义按抓取数据的函数
    getURL <- function(url) {
    # 按查询商品评价的查询URL抓取评价
        # 加载相关包
        library(rvest)
        library(jsonlite)
        tmp <- url %>% read_html(encoding="GBK") %>%
            html_nodes("p") %>%
            html_text %>%
            gsub(pattern="\"rateDetail\":|,\"searchinfo\"(.*)\"", replacement="") %>%
            fromJSON
        ratetmp <- list(lastPage=tmp$paginator[[2]],
                        currentPage=tmp$paginator[[3]],
                        rateLog=data.frame(userNick=tmp$rateList$displayUserNick,
                                           rateDate=tmp$rateList$rateDate,
                                           rateContent=tmp$rateList$rateContent,
                                           check.rows=TRUE)
                       )
        return(ratetmp)
    }
    # 拼接初始链接currentPage=
    gurl <- paste("https://rate.tmall.com/list_detail_rate.htm?itemId=",itemId,
                  "&sellerId=",sellerId,
                  "&currentPage=",
                  sep="",collapse="")
    # 抓取第一页的评价
    tmp <- getURL(paste0(gurl,1))
    tmpData <- tmp$rateLog
    # 记录评价的总页数
    lastPage <- tmp$lastPage
    # 循环抓取每一页的评价记录
    if (lastPage > 1){
        for (i in 2:lastPage){
            tmpData <- rbind(tmpData,
                             getURL(paste0(gurl,i))$rateLog)
        }
    }
    tmpData$sellerId <- sellerId
    tmpData$itemId <- itemId
    return(tmpData)
}
  • 运行脚本,抓取宝贝评价,并保存到对象td
sellerId <- 2838892713
itemId <- 540677983314
td <- getAllRate(itemId, sellerId)
  • 开始绘制词云前,需要对评价进行分词。

分词,就是把巴拉巴拉的一堆文字拆成词,以及统计每个词的出现频次。R语言中常用的分词包有rwordseg和jiebaR。rwordseg的可控制性比较好,能比较方便地搞自定词典,但需要说明的地方太多了,都能再写个几篇出来了。还是用jiebaR吧,注释能省好多字呢。_

# 分词和统计词频
install.packages("jiebaR")
install.packages("wordcloud2")
library(jiebaR)
library(wordcloud2)
# 把要分词的评价提出来,保存入对象wd 
wd <- paste(td$rateContent,sep="",collapse="")
# 创建分词引擎
mixseg <- worker("mix")
# 分词和词频统计
kd <- segment(wd,jiebar=mixseg)
kd <- kd[nchar(kd)>1] # 筛选掉字符数只有1的无意义词
sd <- data.frame(table(kd)) # 统计各个词的频数
sd <- sd[sd$Freq>5,] # 只保留频数多于5的词
sd <- sd[-grep(pattern="华为|手机",sd$kd),] # 删除一些无实际意义的中性词
sd <- sd[order(sd$Freq,decreasing=TRUE),] # 排序
wordcloud2(sd) # 绘图,提供很丰富的参数,可以做得很漂亮
图片.png

简单看一下:1.Mate 9的评价挺不错的,对客服、流畅、速度方面的评价较好。2.苹果又躺枪了,行业标杆伤不起啊。3.光学镜头关注的人挺多,我个人试了下确实不错,点个赞。
另外,wordcloud2包制作的词云图可以保存为交互式网页,回头试一下就知道了。

  • 自定义词云形状。

做个黑白的图片,放在wordcloud2的examples目录下,就可以用了。哎,以前出神入话的画猪头技术退步了

piggy <- system.file("examples/pig.png",package="wordcloud2")
wordcloud2(sd,figPath=piggy)
图片.png

相关文章

  • R语言学习:抓取天猫评价,以及制作词云图

    在上期学习笔记中,记录了使用rvest包抓取宝贝搜索结果页的过程,其中记录了宝贝ID和sellerID。这次学习使...

  • 利用R制作词云图

    制作词云图本不是难事,利用R或者tableau可以轻松制作出花式词云图,但是词源的获取就不是那么容易了,今天我们就...

  • 学习小组Day4笔记--扬马延

    R语言学习 1. R以及R studio安装 直接搜索R语言网页可直接安装 2. R语言入门 参考书目《R for...

  • 在线绘制词云图

    前言 之前我们介绍了wordcloud,pyecharts库制作词云图的方法,那肯定有小伙伴想问,不会编程,怎么制...

  • day5 阿来

    继续学习R语言 R语言数据学习 数据R语言学习.png 数据输入 数据输出 总结 R语言学习的第二天,熟悉了很多操...

  • Pyecharts词云图制作教程

    前言 之前我们使用wordcloud库制作了词云图,今天我们就来学习另外一种制作词云图的方法,那就是pyechar...

  • 制作词云图

    今晚主要干了一件事情:制作词云图。 用Python从评价中提取出一些关键词或频率最高的词来做一个词云图。也就是通过...

  • R 语言之云图技巧

    R Package wordcloud2 library(wordcloud2)wordcloud2(demoFr...

  • R语言制作词云

    准备工作 安装下面几个packages. 其中,第一个包用来画词云,第二个包结合第三个包可以自定义中文字体。 自定...

  • R语言制作词云

    安装R包 jiebaR,jiebaRD :分词 wordcloud2 : 生成词云 安装成功 处理数据 语法 调用...

网友评论

本文标题:R语言学习:抓取天猫评价,以及制作词云图

本文链接:https://www.haomeiwen.com/subject/afpzgttx.html