进入携程官网查询杭州有哪些景点
f12 debug可以看到请求了某个接口 得到的数据 我们需要自己分析一下这个接口 需要的参数 请求头等。
我们在爬取的时候可以根据这个接口直接post请求json数据格式的景点信息
简单写一下 需要更详细的可以自己研究一下。
public class test {
public static void main(String[] args) throws IOException {
//请求参数 json格式的
//keyword 请求的地方是哪里
//pidx 指的是当前要请求的页数
//psize 每一页的大小
String ss="{\"pageid\":103061,\n" +
"\"searchtype\":2,\n" +
"\"keyword\":\"杭州\",\n" +
"\"needfact\":false,\n" +
"\"sort\":1,\n" +
"\"pidx\":1,\n" +
"\"psize\":20,\n" +
"\"reltype\":1,\n" +
"\"excepts\":[],\n" +
"\"filters\":[],\n" +
"\"isneedf\":true,\n" +
"\"isintion\":true,\n" +
"\"imagesize\":\"C_200_130\",\n" +
"\"assistfilter\":{\"userChooseSite\":\"100065\"},\n" +
"\"contentType\":\"json\",\n" +
"\"head\":{\"appid\":\"100013776\",\"cid\":\"09031037411652485539\",\"ctok\":\"\",\"cver\":\"1.0\",\"lang\":\"01\",\"sid\":\"8888\",\"syscode\":\"09\",\"auth\":\"\",\"extension\":[]},\n" +
"\"ver\":\"7.10.3.0319180000\"}";
Map headers=new HashMap();//请求头
headers.put("Content-Type","application/json");
headers.put("user-agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36");//模拟浏览器请求
HttpClient h=new JavaHttpClient();//自己写一个httpclient的请求
String s = h.dopost("http://sec-m.ctrip.com/restapi/soa2/12530/json/ticketSpotSearch?_fxpcqlniredt=09031037411652485539",headers,new ByteArrayInputStream(ss.toString().getBytes()),null).getResponseString();
JSONObject j= JSON.parseObject(s);
JSONObject da=j.getJSONObject("data");
}
}
请求后得到的json数据
想要得到所有的景点信息 那就循环请求组装请求参数中的页数 注意循环请求需要一定的休息时间 否则会ip限制。