HttpClient获取京东商城评论(java实现)

首先介绍一下这里使用的工具和获取数据的基本原理:

工具:1、HttpClient 4.5.3(解压之后将lib文件夹内的jar包导入项目即可)

     2、gson-2.2.4.jar(处理json格式的数据)

原理:由于京东评论的页面是动态加载的,是通过ajax无刷新加载出来的。所以可以模仿ajax的过程来实现评论内容的加载。首先在评论页面的调试窗口找到请求评论的地址,如图所示:

上图的Request URL就是对后台请求评论数据的地址。其中productId是商品号,score表示评论的类型(好评为3 中评为2 差评为1 全部评论为0 追评为5),page是页码,pageSize是每页最多的评论数(最大为10)。

然后通过请求得到json数组的格式的数据,最后对这些数据进行就能筛选得到评论的数据。

 

上干货:

 

 
  1. //通过get方法发送请求

  2.  
  3. public static void downloadPage(String path, String savePath,int headerLength) throws HttpException, IOException {//headerLength是上述图片中的callback

  4.  
  5. HttpGet httpGet = new HttpGet(path);//path就是上述的Request URL

  6. httpGet.setHeader("Connection", "keep-alive");

  7. httpGet.setHeader("User-A", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");

  8.  
  9. CloseableHttpResponse response = httpclient.execute(httpGet);

  10.  
  11. int statusCode = response.getStatusLine().getStatusCode();

  12. HttpEntity entity = response.getEntity();

  13.  
  14. if (statusCode == HttpStatus.SC_OK) {

  15. InputStream input = null;

  16. //将请求后反应得到的数据写入输入流

  17. input = entity.getContent();

  18.  
  19. BufferedReader br = new BufferedReader(new InputStreamReader(input));

  20.  
  21. String line = null;

  22. while ((line = br.readLine()) != null) {

  23. //把得到的不规范的json数据裁剪

  24. String reqBody = line.toString().substring(headerLength+1, line.length() - 2);

  25.  
  26. JsonParser parser = new JsonParser();

  27. try {

  28. // 将json格式的字符串转换成json对象

  29. JsonObject json = parser.parse(reqBody).getAsJsonObject();

  30.  
  31. // 得到键是comments的json数组,此时的json数组是键值对的数组

  32. JsonArray jsonArray = json.getAsJsonArray("comments");

  33.  
  34. int length = jsonArray.size();

  35. for (int i = 0; i < length; i++) {

  36. // 得到一条评论信息

  37. JsonElement element = jsonArray.get(i);

  38.  
  39. // 裁剪没用的json格式,得到评论信息

  40. String midContent = element.getAsJsonObject().get("content").toString();

  41.  
  42. //去除文本首尾的引号

  43. String content = midContent.substring(1, midContent.length() - 1);

  44. // 保留原文件的,在原文件的末尾继续写入输出文件

  45. try {

  46. BufferedWriter out = new BufferedWriter(new FileWriter(savePath, true));

  47. out.write(content + "\r\n");

  48. out.close();

  49. } catch (IOException e) {

  50. System.out.println(e);

  51. }

  52.  
  53. }

参考地址 https://blog.csdn.net/u013557576/article/details/78324350

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那些年的代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值