美文网首页java学习之路
java——使用jsoup解析HTML

java——使用jsoup解析HTML

作者: 唯有努力不欺人丶 | 来源:发表于2020-06-03 17:46 被阅读0次

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


    红色框起来的编号就是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信息失败,详情请联系管理员!");
            }
        }
    

    这篇笔记就到这里,如果稍微帮到你了记得点个喜欢点个关注,也祝大家工作顺顺利利!!另外java技术交流群130031711,群里好多学习资料啥的,欢迎各位萌新大佬踊跃加入!

    相关文章

      网友评论

        本文标题:java——使用jsoup解析HTML

        本文链接:https://www.haomeiwen.com/subject/rnsvzhtx.html