这几天做一个Android获取Json的任务,发现Jsoup只能获取静态页面,无法获取动态页面的Json数据。
有同学给我更正:Jsoup可以爬取动态页面,但必须要加请求头(data),以下为正确例子:
String url = "你的网页接口";
Map data = Maps.newHashMap();
data.put("countryCode", "+86");
data.put("mobile", mobile);
data.put("password", "f20332f07cdaab9ec0472655a83438d4");
data.put("invitionCode", "PU9HFMNMZ2FL");
data.put("validateCode", codeCallable);
data.put("geetest_challenge", challenge);
data.put("geetest_validate", validate);
data.put("geetest_seccode", validate + "|jordan");
String json = JSON.toJSONString(data);
Connection.Response response = Jsoup.connect(url).ignoreContentType(true).data(data).requestBody(json)
.header("Accept", "application/json, text/plain, */*")
.header("Content-Type", "application/json;charset=UTF-8")
.method(Connection.Method.POST).timeout(70000).execute();
System.out.println(response.body());
我换了一个思路,用是阿里巴巴alibaba:fastjson第三方包获取json数据,并可以直接转为为实体类,
几行代码就可以解决。代码编写的效率非常高,不得不称赞马爸爸牛逼。
我们先在Gradle Scripts下找到build.gradle(Modele:app)的build.gradle下加入这一行代码
implementation 'com.alibaba:fastjson:1.2.10'
导入第三方库就完成了。
爬取的网页:https://www.6tennis.com/schedule
爬取第三方库的方法很简单,先打开你要爬取得网页,打开你的谷歌浏览器,按F12进入开发者调试模式
然后刷新一下网页页面,就会显示这个网页嗅探到的一些文件,只需要单击小放大镜,然后输入你需要搜索的数据(可以是JSON里面的数据或者文件名)
单击上图第三步骤,就会发现右手方框框里出现一系列的JSON数据。
{"code":"200","message":"\u8bf7\u6c42\u6210\u529f","data":{"total":69,"list":[{"id":8,"game_name":"ATP Cup","is_grandslm":0,"game_level":"750","ground_name":"\u786c
\u5730","match_time":"01.03-01.12"},{"id":13,"game_name":"\u5361\u5854\u5c14\u516c\u5f00\u8d5b","is_grandslm":0,"game_level":"250","ground_name":"\u786c
\u5730","match_time":"01.06-01.11"},{"id":9,"game_name":"\u963f\u5fb7\u83b1\u5fb7\u56fd\u9645\u8d5b","is_grandslm":0,"game_level":"250","ground_name":"\u786c
\u5730","match_time":"01.12-01.18"},{"id":15,"game_name":"