【需求】Jsoup爬取淘寶訂單的訂單號(hào)總結(jié)

簡(jiǎn)介

公司最近在做淘寶商城類的APP,需要獲取到用戶的淘寶訂單信息并用自己的列表展示出來,用過阿里百川的朋友都知道SDK是直接提供了打開用戶訂單的方法,但是它是用H5或淘寶app進(jìn)入用戶訂單,并沒有返回json這樣的數(shù)據(jù)供我們使用,所以就想到了利用webview獲取到用戶訂單的html代碼,然后jsoup爬取用戶訂單信息再展示出來。這里只介紹如何獲取淘寶訂單號(hào),商品名稱、價(jià)格等數(shù)據(jù)可以舉一反三獲取到。

準(zhǔn)備工作

依賴最新的jsoup包

implementation 'org.jsoup:jsoup:1.11.3'

步驟如下

1.先定義一個(gè)類用于獲取當(dāng)前webview顯示的html代碼,這里我在activity用類部類的方式來寫

class HTMLJavaScriptInterface {
        @JavascriptInterface
        @SuppressWarnings("unused")
        public void processHTML(String html) {
            //html 為當(dāng)前webview顯示的html代碼,這里就是最終要處理的操作
        }
    }

2.定義WebViewClient

/*WebViewClient主要幫助WebView處理各種通知、請(qǐng)求事件*/
    private WebViewClient webViewClient = new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            //頁(yè)面加載完成,處理html代碼,復(fù)制黏貼不用改動(dòng)
            mWebView.loadUrl("javascript:HTMLOUT.processHTML(document.documentElement.outerHTML);");
        }
    };

3.初始化用于顯示網(wǎng)頁(yè)的webview屬性

//添加剛才我們定義的js接口
mWebView.addJavascriptInterface(new HTMLJavaScriptInterface(), "HTMLOUT");
//設(shè)置WebViewClient
mWebView.setWebViewClient(webViewClient);

4.訪問淘寶訂單網(wǎng)址

淘寶訂單的h5頁(yè)面地址為:https://h5.m.taobao.com/mlapp/olist.html

mWebView.loadUrl("https://h5.m.taobao.com/mlapp/olist.html");

Jsoup處理獲取到的html代碼

當(dāng)我們?cè)L問到我的訂單頁(yè)面時(shí),可以再HTMLJavaScriptInterface中打印出html代碼先看看代碼結(jié)構(gòu),這里我直接貼圖我自己的淘寶訂單。


2018-08-16_120911.png

然后我們展開一個(gè)li標(biāo)簽,查看詳情


2018-08-16_121514.png

眾所周知,淘寶訂單號(hào)是18位的數(shù)字,而我們可以觀察看,class中的屬性,是19位的數(shù)字,這是為什么呢?我們繼續(xù)查看第2個(gè)li標(biāo)簽


2018-08-16_122338.png

好了,知道訂單號(hào)后,我們接下來就是重點(diǎn)了。

回到我們定義的HTMLJavaScriptInterface中,編寫如下代碼:

class HTMLJavaScriptInterface {
        @JavascriptInterface
        @SuppressWarnings("unused")
        public void processHTML(String html) {
           //創(chuàng)建一個(gè)集合用來最后存訂單號(hào)
           List<String> idList = new ArrayList<>();
           //需要拋異常來查看問題
            try {
                //通過parse方法拿到Document對(duì)象
                Document doc = Jsoup.parse(html);
                //通過getElementById定位到訂單的div位置
                Element div = doc.getElementById("order1");
                //拿到該div下面所有的li標(biāo)簽
                Elements lis = div.getElementsByTag("li");
                //遍歷li標(biāo)簽,用來得到里面div的class屬性
                for (Element li : lis) {
                    //保存不為空的class屬性
                    if (!TextUtils.isEmpty(li.select("div").attr("class"))) {
                       //從上面的class屬性我們可以看到是module 1754124142728272452 storage這樣的,我們就從第7位取到25位,這樣就保留了中間18位的訂單號(hào)
                       idList.add(li.select("div").attr("class").substring(7, 25));
                    }
                }
                //結(jié)束idList就是我們最終獲取到的淘寶訂單號(hào)集合
            
            } catch (Exception e) {
               //查看Jsoup操作的異常
            }
        }
    }

想要了解更多Jsoup的操作,可以訪問Jsoup的中文網(wǎng)學(xué)習(xí)
官網(wǎng)地址

好了,下課,其他問題可以在評(píng)論區(qū)咨詢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容