Jsoup 解析html时,doc.getElementsByClass方法 空格问题

今天发现2年前的爬虫接口爬取突然失败了。调试发现因为html页面结构发生了变化,导致doc.getElementsByClass方法没有获得目标元素节点。经过排除发现html中某个节点的class样式中有空格,如

<span class="pl-1 info-value">.....</span>

经过测试,解决方法如下:

1、使用doc.getElementsByAttributeValue("class","pl-1 info-value"); 来代替,建议使用这种方式

2、使用多个select来代替:比如doc.select("pl-1").select("info-value");

重要说明:

但是select方法存在一个问题,若有其他节点,形如

<span class="pl-1 info-value tred">.....</span>,则使用select方式来查询时,也会被包含进来,原因如下:

不管是select方式还是getElementsByClass方式,若class的值有空格时,像浏览器一样,jsoup在解析时认为存在多个样式pl-1和info-value,此时我们让jsoup直接去查找一个叫"pl-1 info-value"的样式就查找不到了。因为多个样式的存在,所以通过doc.select("pl-1").select("info-value")查询处理的Elements集合中可能包含形如:<tr class="pl-1 info-value"></tr>    、<span class="pl-1 info-value tred">.....</span> 、  <span class="pl-1 tred info-value font14">.....</span> 这样的节点元素。

注意:要是存在查询集合的结果过多的情况可以进一步过滤,比如要是节点名称步一样,则可以进行过滤

doc.select("span.pl-1").select("info-value")、 doc.select("tr.pl-1").select("info-value") 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值