在上一篇日志中我们发现美团酒店列表采用的是ajax.通过查看network找到了ajax提交的网址
https://ihotel.meituan.com/hbsearch/HotelSearch?utm_medium=pc&version_name=999.9&cateId=20&attr_28=129&uuid=61E1B8AD1D61784182F0D300BC63428F3B0EA432DE4CAF30421A27E6D877DD10%401526390515608&cityId=1&offset=40&limit=20&startDay=20180515&endDay=20180515&q=&sort=defaults
点击进去后发现是json字符串,现在我们通过eclipse获取json字符串指定的数据.
首先我们需要用到一个网站将json字符串转化为实体类https://www.bejson.com/
json字符串
校验字符串
转化为实体类
以获取酒店名为例
我将json字符串简化后
{
"stid":"055447599008331380242952538722349532348_anull",
"data":{
"searchresult":[{
"name":"金乾鑫业招待所(新街口地铁站店)"
}
],
},
}
创建3个实体类
JsonRootBean类
private String stid;
private Data data;
public void setStid(String stid) {
this.stid = stid;
}
public String getStid() {
return stid;
}
public void setData(Data data) {
this.data = data;
}
public Data getData() {
return data;
}
Data
private List<Searchresult> searchresult;
public void setSearchresult(List<Searchresult> searchresult) {
this.searchresult = searchresult;
}
public List<Searchresult> getSearchresult() {
return searchresult;
}
Searchresult
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
开始测试
@Test
public void testName020() throws Exception {
Document document = Jsoup.connect(
"https://ihotel.meituan.com/hbsearch/HotelSearch?utm_medium=pc&version_name=999.9&cateId=20&attr_28=129&uuid=61E1B8AD1D61784182F0D300BC63428F3B0EA432DE4CAF30421A27E6D877DD10%401526385873359&cityId=1&offset=40&limit=50&startDay=20180515&endDay=20180515&q=&sort=defaults")
.ignoreContentType(true).get();
Elements select = document.select("body");
String text = select.text();
JsonRootBean jsonRootBean = JSONObject.parseObject(text, JsonRootBean.class);
for (int i = 0; i < 50; i++) {
String name = jsonRootBean.getData().getSearchresult().get(i).getName();
//为了显示好看,我手动添加的id 你们也可以自己找
System.out.println(i+1+" "+name);
}
}
完美运行