0
点赞
收藏
分享

微信扫一扫

java——使用jsoup解析HTML

有点d伤 2021-09-30 阅读 135

额,随着小项目做的越来越多,技术啥的不见得涨多少,但是各种稀奇古怪的玩意儿肯定越接触越多。
本来一个好好的网站项目,突然被告知有一些要用到爬虫的东西。离交任务不到一周突然接到这个通知我简直???
不过一细问才知道并没有那么难,也是领导一知半解了吓唬我,其实就是根据某东的sku直接获取商品的主图和价格,商品名,商家名等信息。
这里简单说一下,京东中商品的sku就是编号,下面附个图解释:




注意一下,哪怕是一家店铺,一个商品的多种不同选择,也是不同的sku。简单来说一个sku肯定对应唯一的一个商品和价格。
在app上看的不清楚,但是在网站上很容易能看出直接

 "https://item.jd.com/"+skuId+".html"

上面的网址就可以打开某一个sku的详情页面。如下这几个都是可以直接打开的:
https://item.jd.com/31014227524.html
https://item.jd.com/32399509894.html
https://item.jd.com/31014227526.html

回到正题,今天的任务就是知道商品的sku同时获取商品的详细信息等。然后其实在没用jsoup之前,我也尝试用一种很无脑的方式实现了的。如下:


其实就是一个简单的http请求获取页面。然后根据页面的特性去模糊匹配。但是具体的查询方法比较low,而且遇到特殊的商品可能还查询出来的不对。可能再完善完善细节就实现了,但是我已经没耐心了。
到这才说到正题:jsoup解析器
我感觉单纯的jsoup是和任何爬虫无关的,它本身只是一个html的解析器。提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出数据。
然后下面是使用方法:

  1. 导包
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.12.1</version>
        </dependency>
  1. 使用
    其实看我上面的代码,就是自己写请求去获取页面,然后返回html页面,虽说代码不多但是也挺麻烦的,而jsoup支持直接从url中获取内容(深感后悔自己之前浪费好多时间),简单一句代码:
Document document = Jsoup.connect("https://item.jd.com/"+skuId+".html").get();

这一句话,document获取的就是这个url的html。等同于我上文中的result。然后下一步就是在这个document树上获取自己想获取的信息。
好的,我被现实痛击了!这个京东爬过来的源码中没有价格。。
脑壳痛,据多方研究讨论,这个价格应该是京东特意做成这样的,目的就是为了反爬。。但是除了价格别的都可以。比如商品标题,比如图片啥的。
经过和领导的争论,这里领导说可以不要价格了。然后剩下的就比较简单。我反正是用了很low的一种形式实现了。先附上实现代码。以后有改动了会跟着更改本文的:

    public R getSku(String skuId) {
        try {
            Document document = Jsoup.connect("https://item.jd.com/"+skuId+".html").get();
            Elements elements = document.getElementById("choose-attr-1").getElementsByClass("selected");
            String string = elements.toString();
            string = string.substring(string.indexOf("//")+2,string.indexOf(".jpg"))+".jpg";
            String title = document.title();
            return R.ok().put("img", string).put("title", title);
        } catch (Exception e) {
            return R.error("查询sku信息失败,详情请联系管理员!");
        }
    }

附上一点内容,某不留名大佬给了我一个查询京东商品价格的接口,在这记录一下:

String url1 = "https://p.3.cn/prices/mgets?skuIds="+Long.valueOf(skuId);

就酱,over~
这篇笔记就到这里,如果稍微帮到你了记得点个喜欢点个关注,也祝大家工作顺顺利利!!

举报

相关推荐

0 条评论