java景区门票计算_Java抓取去哪网景点门票数据

比如想获得去哪网北京所有门票的信息,地址是http://piao.qunar.com/ticket/list.htm?keyword=%E5%8C%97%E4%BA%AC&region=&from=mps_search_suggest,用谷歌浏览器访问,然后按F12,选择network,经过分析,门票的数据返回list.json,所以可以在搜索框中数据list.json,只查看list.json请求的地址和返回的数据

0818b9ca8b590ca3270a3433284dd417.png

如果想看返回的json格式点击Response,或者将Request URL的地址输入到浏览器查看

知道请求的地址和返回的数据格式就可以写代码了,实际上就是解析json的过程

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;

import java.util.List;

import java.util.Map;

import net.sf.json.JSONObject;

/**

* 去哪网景点门票

*/

public class QunarTest {

public static void main(String[] args) {

for (int i = 1; i <= 50; i++) {//循环页,通过谷歌浏览器查看总页数

String url = "http://piao.qunar.com/ticket/list.json?keyword=%E5%8C%97%E4%BA%AC&region=&from=mps_search_suggest&total=2288&page="+ i;

String json = openUrl(url, "utf-8");

JSONObject jsonMap = new JSONObject();

Map map = jsonMap.fromObject(json);

Map sightListMap = (Map) map.get("data");

List> list = (List) sightListMap.get("sightList");

for (Map itemMap : list) {

String sightId = itemMap.get("sightId").toString();

String sightName = itemMap.get("sightName").toString();

String address = itemMap.get("address").toString();

String price = itemMap.get("qunarPrice").toString();

// 景点详细页URL

String detailUrl = "http://piao.qunar.com/ticket/detail_"

+ sightId + ".html#from=qunarindex";

// 景点详细页html

String html = openUrl(detailUrl, "utf-8");

}

}

}

/**

* 访问url返回url的html代码

*/

public static String openUrl(String currentUrl, String charset) {

InputStream is = null;

BufferedReader br = null;

URL url;

StringBuffer html = new StringBuffer();

try {

url = new URL(currentUrl);

URLConnection conn = url.openConnection();

conn.setReadTimeout(5000);

conn.connect();

is = conn.getInputStream();

br = new BufferedReader(new InputStreamReader(is, charset));

String str;

while (null != (str = br.readLine())) {

html.append(str).append("\n");

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (br != null) {

try {

br.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (is != null) {

try {

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return html.toString();

}

}

如果需要门票的详情,如哪些网站或旅行社在卖门票,各种类别的门票和各种类别门票的价格,需要进入景点详细页用正则表达式提取

以上代码没有做异常处理和非空判断,不建议直接使用

解析json用的jar包

commons-beanutils-1.7.0.jar

commons-collections-3.1.jar

commons-lang-2.5.jar

commons-logging.jar

ezmorph-1.0.3.jar

json-lib-2.1-jdk15.jar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值