http://www.upqq.net/java/189.html

1,向String surl = "http://www.mafengwo.cn/qa/ajax_pager.php?type=0&mddid=10184&tids=0&action=question_index&start="+start;发送连接请求。

2,获取到的输出流(如下,里面中文机标点符号之类会用/u表示),拼接成字符串(StringBuilder)。

{"payload":{"list_html":"\u003cli class=\"item clearfix _j_question_item\" data-qid=\"1826184\"\u003e\n \u003cdiv class=\"wen\"\u003e\n \u003cdiv class=\"label\"\u003e\n \u003cspan class=\"avatar avatar32\"\u003e\u003ca href=\"\/wenda\/u\/31175432.html\" class=\"_j_filter_click\" target=\"_blank\"\u003e\n \u003cimg class=\"_j_filter_click\" src=\"http:\/\/file28.mafengwo.net\/M00\/F8\/23\/wKgB6lRMvDmAZG2JAADRVqH0XuY02.head.w48.jpeg\" height=\"32\" width=\"32\"\u003e\n \u003c\/a\u003e\u003c\/span\u003e\n \u003cspan class=\"icon icon-gl\"\u003e\u003c\/span\u003e\n \u003c\/div\u003e\n \u003cdiv class=\"title\"\u003e\n \u003ca href=\"\/wenda\/detail-1826184.html\"(部分)

3,将这个Json字符串解析(要下jar包,可通过http://json.cn/,在线解析看到如下,此时/u已经被解析为可理解的字符了),获取"payload"里“list-item"的字符串,即为我们需要提取的数据源。

{
    "payload":Object{...},
    "resource":{
        "css":[

],
        "js":[

]
    }
}

{
    "payload":{
        "list_html":"<li class="item clearfix _j_question_item" data-qid="1826184"> <div class="wen"> <div class="label"> <span class="avatar avatar32"><a href="/wenda/u/31175432.html" class="_j_filter_click" target="_blank"> <img class="_j_filter_click" (部分)

java代码如下:

JSONObject  dataJson=JSONObject.fromObject(sb.toString());
JSONObject  response=dataJson.getJSONObject("payload");
String info=response.getString("list_html");

4,json返回的字符串包装成InputStreamReader,便于按行读取。java代码如下:

InputStreamReader isr=new InputStreamReader(new ByteArrayInputStream(info.getBytes(Charset.forName("utf8"))), Charset.forName("utf8"));

5,写正则表达式,抓取数据源中的数据(问题,发布时间,浏览量)。java代码如下:

String pattern = "<li class=\"item clearfix _j_question_item\" data-qid=\"\\d+\">";
String regularQues = "<a href=\"/wenda/detail-\\d+.html\" class=\"_j_filter_click\" target=\"_blank\">[^<>]*</a>";
String regularDate = ">\\d{4}\\-\\d{1,2}\\-\\d{1,2} \\d{1,2}\\:\\d{1,2}";//日期
String regularViewNum = "<a>浏览[^<>]*</a>";

int index=0;

6,将结果写入excel中(要下jar包)。java代码如下:

static WritableWorkbook wwb;
static WritableSheet ws;

File fileWrite = new File("testWrite.xls");
fileWrite.createNewFile();
OutputStream os = new FileOutputStream(fileWrite);
wwb=Workbook.createWorkbook(os);
ws=wwb.createSheet("问答浏览数目统计",0);
ws.addCell(new Label(0,0,"问题"));
ws.addCell(new Label(1,0,"发布时间"));
ws.addCell(new Label(2,0,"浏览量"));

问题总结:

1,开始直接向http://www.mafengwo.cn/wenda/10184-0/hot.html发送请求,发现只能分析出不到20条记录。然后才发现,网页底端,有个“点击加载”,点击后新加载20条记录。用浏览器的审查元素,查看,可获得如下:

  1. Request URL:
    http://www.mafengwo.cn/qa/ajax_pager.php?type=0&mddid=10184&tids=0&app_link=&action=question_index&start=40

2,这个网址返回的是json数据(上面提到的,图中也有显示),刚开始一直傻傻的在想怎么把它编码成中文的。TT

3,当start大于400多时,返回的json为如下:

{"payload":{"list_html":"\u003cdiv class=\"qa-empty\"\u003e\n \u003ci class=\"icon-empty\"\u003e\u003c\/i\u003e\n \u003cp\u003e\u65e0\u76f8\u5173\u95ee\u9898\u003c\/p\u003e\n\u003c\/div\u003e\n","total":500,"page_html":"","ret":1},"resource":{"css":[],"js":[]}}

看来看不到网页列的2万多条记录,只能看到四百多条。

4,单个中文的匹配就是那个中字,程序中用index标记开始读的每一块。[^<>]*这种类型的正则挺好用的。

读取蚂蜂窝某分类下问答浏览数相关推荐

  1. 不做传统OTA要做内容电商,蚂蜂窝缘何推未知旅行?

    大概20多天前,一则题为"一场未知的旅行"的社交广告刷爆朋友圈,之后针对这条广告发出的阐述文章<你敢不敢?3小时后,用一场未知旅行检验一段感情>一经发布后,更是在被咪蒙 ...

  2. Diango博客--17.统计各个分类和标签下的文章数

    文章目录 0.思路引导 1.Model 回顾 2.数据库数据聚合 3.使用 Annotate 4.在模板中引用新增的属性 0.思路引导 在我们的博客侧边栏有分类列表和标签列表,显示博客已有的全部文章分 ...

  3. layui获得列表json数据_golang实战开发之博客功能篇:文章列表的读取与展示和分类筛选展示处理...

    前面我们介绍了文章详情页面的展示的逻辑代码实现,这一节,我们将继续讲解文章列表的读取和展示.文章根据分类进行筛选.最新文章.热门文章等的调用处理逻辑. 首先,我们先编写文章列表页的前端代码.这里,我们 ...

  4. 蚂蜂窝上线酒店预订 商业化进展步骤之一

    转自 http://www.traveldaily.cn/article/81079.html 旅游社区最终都要走到产品销售的一步,不管是酒店也好,机票也好,旅游路线也好.今年我们看到不少旅游社区加快 ...

  5. ​多分类下的ROC曲线和AUC​

    本文主要介绍一下多分类下的ROC曲线绘制和AUC计算,并以鸢尾花数据为例,简单用python进行一下说明.如果对ROC和AUC二分类下的概念不是很了解,可以先参考下这篇文章:机器学习之分类器性能指标之 ...

  6. php遍历子分类的函数,emlog程序获取主分类下的所有子分类ID函数

    emlog程序获取主分类下的所有子分类ID函数 蓝叶    网站设计    2021-01-04    208    0评论 emlog程序在制作模版时,需要增加一些自定义的列表调用,只设置主分类ID ...

  7. Python 爬取蚂蜂窝旅游攻略 (+Scrapy框架+MySQL)

    前言:使用python+scrapy框架爬取蚂蜂窝旅游攻略 Git代码地址:https://github.com/qijingpei/mafengwo 获取代理IP地址的开源项目ProxyPool-m ...

  8. 19秋计算机应用基础在线作业2,计算机应用基础19秋在线作业2 Windows 下能浏览并管理文件 驱动器及网络连接的强大工具是...

    1.Evaluation Warning: The document was created with Spire.Doc for .NET.计算机应用基础19秋在线作业21 单选题1 Windows ...

  9. Java爬虫学习一一Jsoup爬取彼岸桌面分类下的图片

    最近在找工作,在这个过程中我感到很迷茫,投了很多简历,被查看的却很少,其中也有到现场去面试,结果也很不理想(╥╯^╰╥). 哈哈,跑题了,我在看之前所做的项目时,在我的收藏夹中看到了以前收藏的有关爬虫 ...

最新文章

  1. 20145231 《信息安全系统设计基础》第11周学习总结
  2. C#中子线程操作主线程中窗体上控件的方法
  3. python怎么按键开始与停止_python 图形化开始与停止功能的实现
  4. C语言 realloc函数 带着内存游走的函数
  5. 中断按键c语言程序设计,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...
  6. [js] 写一个 document.querySelector 的逆方法
  7. 侍魂服务器维修,侍魂胧月传说合服活动开启 4月15日更新内容预告
  8. 新能源汽车简史——电动汽车沉浮录
  9. 云计算与虚拟化了解二三事
  10. Xavier上的第一个I2C驱动
  11. 优先队列-二叉堆-堆排序原理-Java相关API
  12. 和 jQuery 说再见!Bootstrap 5 将移除对其依赖
  13. [转]缓存穿透与缓存雪崩
  14. python from import 和 import 区别_python import和from import的区别
  15. CAXA 数控车编程视频教程 CAXA车床绘图教程
  16. 笔试题目——研发工程师笔试题
  17. 当 JS 大猪蹄子遇到 HTML 小姐姐
  18. matlab和opencv混编(mex问题,mexopencv问题)(水下相机折射补偿:Pinax-model)
  19. HLOJ 1562* 手指游戏
  20. 视频流 FFmpeg kvs等

热门文章

  1. windbg符号表路劲设置成功后没有自动下载
  2. 追逐算法之--牛鞭的子弹是怎样练成的(2)--简单追逐
  3. 为什么过了35岁就不适合做技术了呢?
  4. 【牛腩】“/”应用程序中的服务器错误
  5. 会声会影简易相册制作教程
  6. 状态空间方程系统建模
  7. html圆圈中打钩代码,CSS3点击按钮圆形进度打钩效果的实现代码
  8. 咚咚咚————【封装驱动】MLX90614医用级红外温度传感器,分享交流自己编写的程序。
  9. 坚持一年,成功进入前50名!
  10. SER | 语音情绪识别 | TIM-NET_SER项目实现,以及训练自己的语音数据集,后期修改网络