1、问题描述
最近在用Jsoup 爬数据,对方是API接口,返回的是JSON结构,但是在获取数据后发现有部分数据缺失,其中主要缺失的数据时 标签类的数据。
2、排查过程
2.1、使用Postman 调用接口返回数据正常
2.2、使用jsoup 传入同样的参数,调用后拿到的数据不正确
2.3、对比参数,参数一致,并且去掉大部分参数后postman 返回的结果依然正常
2.4、浏览器直接调用接口,这时发现一个问题,浏览器解析了标签,但是图片没有显示出来
3、问题定位
通过第二步的排查,前三个排查都没问题,问题出现在第四个现象中,此时我怀疑是因为我用Joup 直接返回的Document对象导致,修改后问题解决
4、解决办法
修改Joup返回方式,不直接返回Docment对象,改为直接返回字符串,如果要提取部分内容,还是要用Document 来解析的
更改前:
public Document get(String url) throws IOException {Document doc = Jsoup.connect(url).header("Accept-Encoding", "gzip").header("Content-Type", "application/x-www-form-urlencoded").userAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1").ignoreContentType(true).referrer(url).get();return doc;}
更改后:
public String get(String url) throws IOException {Connection.Response doc = Jsoup.connect(url).header("Accept-Encoding", "gzip").header("Content-Type", "application/x-www-form-urlencoded").userAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1").ignoreContentType(true).method(Connection.Method.GET).referrer(url).execute();String body = doc.body();return body;}
以上只是个人使用的一次问题记录,也可能是自己使用不对导致获取document对象内容错误。