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. 为物联网产业化发展提供坚实保障
  2. HALCON查找圆心
  3. 如何在python中显示电脑中的图片-如何在python界面显示图片
  4. 关于String函数
  5. linux 神的编辑器,编辑器之神-vim的使用,编辑器神-vim
  6. Windows软件调试学习笔记(1)
  7. java实现遍历树形菜单方法——OpenSessionView实现
  8. poll接口《来自Linux驱动程序开发实例》
  9. java自行车起源_自行车的起源
  10. 浏览器输入网址到页面呈现的过程
  11. 日常邮件用语(一)网摘学习
  12. ZXing开发彩色二维码
  13. windows通过注册表修改IP
  14. h5页面如何切图_html5怎么切图
  15. 全球及中国网络教育行业商业模式与运行前景分析报告2022版
  16. iOS 图片压缩策略
  17. 机房合作—SVN skipped remains conflicted
  18. POJ 4001 xiangqi(模拟)
  19. java faker_Faker--伪造数据利器
  20. 图解计算机基础网站上线了

热门文章

  1. 韶关市人力资源和社会保障局远程容灾数据备份项目询价
  2. 10Base-T 与 100Base-TX 的区别
  3. 阿蒙:我看“2007年中国软件百强”
  4. C程序设计 假如我国国民生产总值的年增长率为7%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为p=(1+r)^n,r为年增长率,n为年数,p为与现在相比的倍数。
  5. 贵金属模拟交易有用吗?
  6. 遗传算法之求取函数极值
  7. Python 让小海龟互动起来——turtle和tkinter混合使用
  8. 使用树莓派摄像头识别二维码,并通过http返回结果
  9. android平板专用系统,Chrome OS将取代Android成为平板专用系统
  10. 求解器Gurobi 超过二次的高阶多项式表达方法(python)