爬取京东评论、分词+词频统计、词云图展示
一、爬取京东评论
京东评论竟然全部对外开放
public class CommentCrawler {final static PoolingHttpClientConnectionManager httpClientConnectionManager = new PoolingHttpClientConnectionManager();final static int MAX_PAGE = 50;static HttpClient getClient() {return HttpClients.custom().setConnectionManager(httpClientConnectionManager).build();}static String getUrl(String productId, int page) {return String.format("http://sclub.jd.com/comment/productPageComments.action?productId=%s&score=0&sortType=3&page=%d&pageSize=10",productId, page);}static Comment commentFromJson(JSONObject json, String productId) {return new Comment(json.getLongValue("id"), productId, json.getString("score"), json.getString("content"));}public static boolean crawlComments(String productId) {try {int maxPage = 1;int nowPage = 0;HttpClient client = getClient();while (nowPage < maxPage) {String url = getUrl(productId, nowPage);HttpGet get = new HttpGet(url);HttpResponse resp = client.execute(get);JSONObject json = JSON.parseObject(EntityUtils.toString(resp.getEntity()));JSONArray comments = json.getJSONArray("comments");if (comments.size() == 0)return false;CommentService ser = new CommentService();for (int i = 0; i < comments.size(); i++) {Comment comment = commentFromJson(comments.getJSONObject(i), productId);ser.insertComment(comment);}if (nowPage == 0) {maxPage = json.getInteger("maxPage");ser.insertProduct(new Product(productId, comments.getJSONObject(0).getString("referenceName")));}nowPage++;}ProductJudger.judge(productId);return true;} catch (Exception e) {e.printStackTrace();}return false;}
}
二、结巴分词
jieba分词原本是Python版的,有人把它改成了Java版,名字也改成了jieba-analysis
JiebaSegmenter segmenter = new JiebaSegmenter();List<Word> list = segmenter.sentenceProcess(str);for (Word i : list) {String token = i.getToken();if (stopWords.contains(token)) {continue;}Integer cnt = map.get(token);if (cnt == null) {cnt = 0;}map.put(token, new Integer(cnt + 1));}
三、词云图
用到d3.js,d3-cloud.js这两个库,d3.js是“Data Driven Document”,d3-cloud这个库还是比较难用的,主要是官方实例代码太少了。
这里给出一个例子:每一个词云图都对应一个字典,这个字典就是“词语:频率”这样的键值对。给定多个字典,每一个字典都要渲染成一个词云图。
<div id="word-clouds" style="text-align: center"></div>
<script>var wordClouds = <%=request.getAttribute("wordClouds")%>;$(document).ready(function () {for (var i in wordClouds) {var it = wordClouds[i];var divId = "product_wordcloud" + it['productId'];$("#word-clouds").append("<h3 align='center'>商品" + it['productId'] + "词云图</h3>").append("<div id='" + divId + "'></div>");createWordCloud(transformWordFraquency(it['words']), "#" + divId)}})
</script>
还需要编写如下JS代码
var fill = d3.scale.category20();// 20种颜色
var wordCloudWidth = 800, wordCloudHeight = 400;
var font_name = "楷体", font_weight = "bold", max_font_size = 50;
var word_count = 50;// 显示词汇个数
var word_max_size = 60;// 显示词汇字体最大字号
var word_min_size = 10;// 显示词汇字体最小字号
/** 函数名称:transformWordFrequency* 参数words:字典类型,形如“{word1:cnt1,word2:cnt2,word3:cnt3}” 返回值:{text,size}数组*/function transformWordFraquency(words) {var ar = []for ( var i in words) {ar.push({"text" : i,"size" : words[i]})}// 按照字体的大小从大到小进行排序,只取出现次数较多的前几名ar.sort(function(x, y) {return y['size'] - x['size'];})ar = ar.slice(0, Math.min(word_count, ar.length));for (var i = 0; i < ar.length; i++) {ar[i]['size'] = word_max_size - (word_max_size - word_min_size)/ ar.length * i;}return ar;
}
/** wordMap是[{text:"",size:""}]形式的数组 selector是即将渲染到的目标位置*/
function createWordCloud(wordMap, selector) {d3.layout.cloud().size([ wordCloudWidth * 2 - 100, wordCloudHeight * 2 - 100 ]).words(wordMap).font(font_name).fontWeight(font_weight).fontSize(function(d) {return d.size;}).rotate(function() {return 0;}).on("end", function(words) {renderWordCloud(words, selector)}).start();
}
/** 像这种风格的函数调用,这些函数的调用顺序不能变*/
function renderWordCloud(words, selector) {d3.select(selector).append("svg").attr("width", wordCloudWidth).attr("height", wordCloudHeight).append("g").attr("transform","translate(" + wordCloudWidth / 2 + "," + wordCloudHeight/ 2 + ")").selectAll("text").data(words).enter()// 进入words,相当于for循环.append("text").style("font-family", font_name).style("font-weight", font_weight)// .attr("text-anchor", "middle").style("font-size", function(d) {// 字体大小return d.size + "px";}).style("fill", function(d, i) {// 字体颜色return fill(i);}).attr("transform",function(d) {return "translate(" + [ d.x, d.y ] + ") rotate("+ d.rotate + ")";}).text(function(d) {return d.text;});
}
转载于:https://www.cnblogs.com/weiyinfu/p/7089114.html
爬取京东评论、分词+词频统计、词云图展示相关推荐
- 爬取《政府工作报告》词云展示并做词频统计
爬取<政府工作报告>词云展示并做词频统计 爬取<政府工作报告内容代码: from requests import * from bs4 import BeautifulSoup r= ...
- 爬取京东评论做数据分析,通过词云图可视化提供决策
很久没写了,今天写一个关于Python爬取网络数据然后数据清洗拆分,最后通过词云图可视化的练手小项目.主要学习Python网络爬虫.解Json,存储CSV文件,再读取爬回来的CSV进行数据清洗和分词, ...
- python爬虫用什么电脑好_【Python】【爬虫】最近想买电脑,用Python爬取京东评论做个参考...
最近想换电脑,又有点不确定买哪一款.所以决定爬取京东上电脑评论,做个参考,并把最终结果绘制成词云图. 一.先来看下三款电脑评价的词云图 1 用Python爬取京东自营ThinkPad T490s的评论 ...
- 【Python爬虫】最近想买电脑,用Python爬取京东评论做个参考
最近想换电脑,又有点不确定买哪一款.所以决定爬取京东上电脑评论,做个参考,并把最终结果绘制成词云图. 一.先来看下三款电脑评价的词云图 1 用Python爬取京东自营ThinkPad ...
- 文本挖掘(超详细:数据获取 - 数据清洗 - 中文分词 - 去除停用词 - 词频统计 - 词云图 - 情感分析)
文本挖掘(超详细) 朋友们好,文本挖掘这篇文章写了也有一段时间了,承蒙朋友们的厚爱,作者后面有做过一个升级版的文本挖掘,但苦于没有时间一直没有更新,现在在抽时间把后面写的这个也发布出来,两篇文章的步骤 ...
- Python爬取京东评论(汇编)
目录 一.爬取京东数据详细链接 (一)爬取京东评论 1.文章一 2.文章二 (二)爬取京东商品信息 1.文章一 二.爬虫过程中遇到的一些问题及解决资料 (一)解决爬虫中Response[200]返回值 ...
- python爬取携程旅游评价信息词云图分析
python爬取携程旅游评价信息词云图分析 前言 前面咱们已经分析过如何爬取携程旅游的相关信息,如果没有看过的,可以先跳转看一下前面的那篇博客:python 爬虫 一键爬取携程旅游团数据 这一篇呢,咱 ...
- python爬携程上出境游数据_python爬取携程旅游评价信息词云图分析
python爬取携程旅游评价信息词云图分析 前言 前面咱们已经分析过如何爬取携程旅游的相关信息,如果没有看过的,可以先跳转看一下前面的那篇博客:python 爬虫 一键爬取携程旅游团数据 这一篇呢,咱 ...
- 爬取京东评论并生成词云
import os import time import json import randomimport jieba import requests import numpy as np from ...
最新文章
- UITextField的代理方法
- oracle 9i net基本配置
- 并不是所有的程序员都适合做技术管理
- 欧盟数据保护新规则 75%云应用没准备好
- Java开发知识之Java面相对象
- 如何进入HPunix的单用户模式
- maya mel uf8_如何在maya中创建uv 的mel语言
- oracle 查找上一个,查看ORACLE_HOME的另外一个方法
- HDU1576 A/B【扩展欧几里得算法+试探法】
- 1.恶意软件中的防双开
- 《计算机网络自顶向下方法第7版》第二章习题解答
- 微信小程序公农历转换的实现
- 2021年CentOS7安装Oracle11g全记录
- 信息系统项目管理师:信息、信息化、信息系统、信息系统开发方法
- 分支语句与循环语句(二)
- A man who has iron bone
- ebuy遇到的问题以及解决方法
- 比最快的超级计算机快一百万亿倍!中国科学家实现“量子计算优越性”里程碑
- 视频会议软件Zoom隐私安全问题大爆发
- 豆芽儿 - 高端IT人才成长社区 上线啦!