版权声明:欢迎转载,转载请注明出处 https://blog.csdn.net/keplerpig/article/details/81701071
1、问题描述
最近在用Jsoup 爬数据,对方是API接口,返回的是JSON结构,但是在获取数据后发现有部分数据缺失,其中主要缺失的数据时<img> 标签类的数据。
2、排查过程
2.1、使用Postman 调用接口返回数据正常
2.2、使用jsoup 传入同样的参数,调用后拿到的数据不正确
2.3、对比参数,参数一致,并且去掉大部分参数后postman 返回的结果依然正常
2.4、浏览器直接调用接口,这时发现一个问题,浏览器解析了<img>标签,但是图片没有显示出来
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对象内容错误。