读取蚂蜂窝某分类下问答浏览数
来源:互联网 发布:广东客家话翻译软件 编辑:程序博客网 时间:2024/04/30 09:53
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条记录。用浏览器的审查元素,查看,可获得如下:
- Request URL:http://www.mafengwo.cn/qa/ajax_pager.php?type=0&mddid=10184&tids=0&app_link=&action=question_index&start=40
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标记开始读的每一块。[^<>]*这种类型的正则挺好用的。
- 读取蚂蜂窝某分类下问答浏览数
- 蚂蜂窝爬虫
- 数据采集(旅游蚂蜂窝)
- 蚂蜂窝特价 v4.4.0 官方安卓版
- Python爬取蚂蜂窝教程
- 蚂蜂窝上线酒店预订 商业化进展步骤之一
- 蚂蜂窝VS穷游最世界-自由行类App分析
- 按分类 统计各分类下的记录数
- 蚂蚁分类信息系统 5.8 修改蚂蚁分类信息系统手机端信息图片浏览方式,自动轮播,带当前图片数字和张数,支持放大浏览
- 蚂蚁分类信息系统 5.8 修改蚂蚁分类信息系统手机端信息图片浏览方式,自动轮播,带当前图片数字和张数,支持放大浏览
- 问答机器人的Python分类
- 【实用技巧】阅读数,分享数,浏览数
- Android酷炫欢迎页播放视频,仿蚂蜂窝自由行和慕课网
- Android酷炫欢迎页播放视频,仿蚂蜂窝自由行和慕课网
- Android酷炫欢迎页播放视频,仿蚂蜂窝自由行和慕课网
- Python爬虫实战——蚂蜂窝国内目的地全抓取
- Python 爬取蚂蜂窝旅游攻略 (+Scrapy框架+MySQL)
- 自己写的一个爬蚂蜂窝的景点数据的Python程序,Mark一下
- Mac之NavicatPremium破解版安装
- 拍A发B活动结合淘宝网红推广引流优化宝贝权重
- 解决springMVC POST 中文乱码
- 汇编-逆置一个数组
- 图文详解 IntelliJ IDEA 15 创建普通 Java Web 项目
- 读取蚂蜂窝某分类下问答浏览数
- JS项目
- POJ 1012(Joseph)
- 内核弹窗
- expandablelist
- MySQL数据库、数据表和字段字符集查询、修改和配置
- 83 stl(十一)
- dx工具
- 如何回答「为什么离职」?【面试核心问题5】