Jsoup 使用问题

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对象内容错误。

<think>好的,我现在需要帮助用户了解如何使用Jsoup这个Java HTML解析库,并提供教程和示例代码。首先,我应该先整理用户提供的引用内容,从中提取关键信息。用户给出的引用1到5都是关于Jsoup的,涵盖了基本介绍、用途、选择器语法、常用方法等。 接下来,我需要按照用户的要求,结构清晰地分步骤讲解Jsoup使用。用户希望看到教程和示例代码,所以应该从环境配置开始,然后逐步展示如何加载HTML、选择元素、提取数据等。同时,必须注意使用中文回答,并且遵循系统级指令中的格式要求,比如行内数学表达式用$...$,但这里可能不太涉及数学公式,所以可能不需要用到。但需要确保代码块正确,独立公式用$$...$$,不过示例中可能没有数学公式,所以这点可能不用考虑。 首先,环境配置部分,引用4提到Jsoup可以直接解析URL或HTML内容,需要添加依赖。用户可能使用Maven,所以应该给出Maven的依赖代码。然后,引用3提到Jsoup用于解析HTML文档,所以需要展示如何从字符串、文件、URL加载HTML文档,这部分可以分别给出示例代码。 接下来,选择元素部分,引用5详细说明了选择器的使用,比如标签选择器、class选择器、id选择器等,需要将这些内容转化为具体的代码示例,比如使用document.select("a")获取链接,.select(".class")获取类元素等。同时,要提到如何提取属性、文本等内容,比如attr()和text()方法。 可能还需要补充数据提取的示例,比如提取链接、图片、表格数据等,这样用户能更全面了解应用场景。另外,用户可能关心异常处理,比如在连接URL时的异常,需要提醒添加try-catch块。 然后,根据用户提供的示例中的结构,生成相关问题。比如如何防止被屏蔽、处理动态页面、提取嵌套元素等,这些是用户可能遇到的后续问题。 需要注意的是,在回答中引用的部分需要添加引用标识,比如在介绍Jsoup时引用4,提到选择器时引用5等。要确保引用标识自然添加在相关段落的末尾。 最后,检查整个回答是否符合格式要求:代码块用三个反引号包裹,结构分步骤,问题部分用“
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值