一、爬取京东评论

京东评论竟然全部对外开放

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

爬取京东评论、分词+词频统计、词云图展示相关推荐

  1. 爬取《政府工作报告》词云展示并做词频统计

    爬取<政府工作报告>词云展示并做词频统计 爬取<政府工作报告内容代码: from requests import * from bs4 import BeautifulSoup r= ...

  2. 爬取京东评论做数据分析,通过词云图可视化提供决策

    很久没写了,今天写一个关于Python爬取网络数据然后数据清洗拆分,最后通过词云图可视化的练手小项目.主要学习Python网络爬虫.解Json,存储CSV文件,再读取爬回来的CSV进行数据清洗和分词, ...

  3. python爬虫用什么电脑好_【Python】【爬虫】最近想买电脑,用Python爬取京东评论做个参考...

    最近想换电脑,又有点不确定买哪一款.所以决定爬取京东上电脑评论,做个参考,并把最终结果绘制成词云图. 一.先来看下三款电脑评价的词云图 1 用Python爬取京东自营ThinkPad T490s的评论 ...

  4. 【Python爬虫】最近想买电脑,用Python爬取京东评论做个参考

      最近想换电脑,又有点不确定买哪一款.所以决定爬取京东上电脑评论,做个参考,并把最终结果绘制成词云图.    一.先来看下三款电脑评价的词云图    1 用Python爬取京东自营ThinkPad ...

  5. 文本挖掘(超详细:数据获取 - 数据清洗 - 中文分词 - 去除停用词 - 词频统计 - 词云图 - 情感分析)

    文本挖掘(超详细) 朋友们好,文本挖掘这篇文章写了也有一段时间了,承蒙朋友们的厚爱,作者后面有做过一个升级版的文本挖掘,但苦于没有时间一直没有更新,现在在抽时间把后面写的这个也发布出来,两篇文章的步骤 ...

  6. Python爬取京东评论(汇编)

    目录 一.爬取京东数据详细链接 (一)爬取京东评论 1.文章一 2.文章二 (二)爬取京东商品信息 1.文章一 二.爬虫过程中遇到的一些问题及解决资料 (一)解决爬虫中Response[200]返回值 ...

  7. python爬取携程旅游评价信息词云图分析

    python爬取携程旅游评价信息词云图分析 前言 前面咱们已经分析过如何爬取携程旅游的相关信息,如果没有看过的,可以先跳转看一下前面的那篇博客:python 爬虫 一键爬取携程旅游团数据 这一篇呢,咱 ...

  8. python爬携程上出境游数据_python爬取携程旅游评价信息词云图分析

    python爬取携程旅游评价信息词云图分析 前言 前面咱们已经分析过如何爬取携程旅游的相关信息,如果没有看过的,可以先跳转看一下前面的那篇博客:python 爬虫 一键爬取携程旅游团数据 这一篇呢,咱 ...

  9. 爬取京东评论并生成词云

    import os import time import json import randomimport jieba import requests import numpy as np from ...

最新文章

  1. UITextField的代理方法
  2. oracle 9i net基本配置
  3. 并不是所有的程序员都适合做技术管理
  4. 欧盟数据保护新规则 75%云应用没准备好
  5. Java开发知识之Java面相对象
  6. 如何进入HPunix的单用户模式
  7. maya mel uf8_如何在maya中创建uv 的mel语言
  8. oracle 查找上一个,查看ORACLE_HOME的另外一个方法
  9. HDU1576 A/B【扩展欧几里得算法+试探法】
  10. 1.恶意软件中的防双开
  11. 《计算机网络自顶向下方法第7版》第二章习题解答
  12. 微信小程序公农历转换的实现
  13. 2021年CentOS7安装Oracle11g全记录
  14. 信息系统项目管理师:信息、信息化、信息系统、信息系统开发方法
  15. 分支语句与循环语句(二)
  16. A man who has iron bone
  17. ebuy遇到的问题以及解决方法
  18. 比最快的超级计算机快一百万亿倍!中国科学家实现“量子计算优越性”里程碑
  19. 视频会议软件Zoom隐私安全问题大爆发
  20. 豆芽儿 - 高端IT人才成长社区 上线啦!

热门文章

  1. poj 2181 jumping cows
  2. 用Python写一个批量生成账号的函数(用户控制数据长度、数据条数)
  3. Python代码之三级登录
  4. django 文件上传 研究
  5. [原创]jQuery动画弹出窗体支持多种展现方式
  6. Spring 与 MVC 框架整合思路
  7. mysql从挂了数据怎么恢复_详解MySQL误操作后怎样进行数据恢复
  8. 关于生活的计算机试题,国家电网考试计算机类试题三
  9. 软件开发demo是什么意思_地府后台管理系统demo出来了!附地址
  10. python面向对象是什么?面试技巧(三分钟读懂)