簡體   English   中英

Jsoup Android解析

[英]Jsoup Android parsing

我正在解析一個網頁...現在完成后...我看到我正在做一件非常愚蠢的事情,所以如果有人可以向我指出這一點:)正確的方向是什么。

我有一個使用Jsoup的Android應用程序,它運行良好,但運行速度非常慢! 我知道原因...因為基本上onCreate我有20,30個Jsoup getElement請求...

 private class Task extends AsyncTask<Void, Void, Void>{
    String linkText;
    @Override
    protected Void doInBackground(Void... params) {
        Initdata();

        return null;
    }
    @Override
    protected void onPostExecute(Void param) {

        mProgressBarHandler.hide();           

        redraw();
        inflatedView.invalidate();
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressBarHandler.show();
    }
}

在Initdata()方法中,我有20-30個Jsoup請求。 即使使用AsyncTask,它也非常慢,現在唯一的區別是,我沒有阻塞UI線程,這很不錯,但是我需要以某種方式“優化”該元素的解析。

private void Initdata(){

    loadImages();
    players = new String[] {util.GetElement("div.item-2:first-child", "http://www.istinomer.rs/", 0),
            util.GetElement("div.item-2:nth-child(2)", "http://www.istinomer.rs/", 0),
            util.GetElement("div.item-2:nth-child(3)", "http://www.istinomer.rs/", 0),
            util.GetElement("div.item-2:nth-child(4)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(5)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(6)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(7)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(8)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(9)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(10)","http://www.istinomer.rs/",0)
    };
 vestiDescription1 = util.GetElement("div.item-big h2", "http://www.istinomer.rs/", 0) + System.getProperty("line.separator")
            + util.GetElement("div.item-big h3","http://www.istinomer.rs/",0);

    vestiDescription2 = util.GetElement("div.grid-8 h2 a", "http://www.istinomer.rs/", 0) + System.getProperty("line.separator")
            + util.GetElement2("div.grid-8 h3","http://www.istinomer.rs/",0);

    vestiDescription3 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(4) > div:nth-child(1) > div:nth-child(4) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription4 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(4) > div:nth-child(1) > div:nth-child(5) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription5 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(4) > div:nth-child(1) > div:nth-child(6) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription6 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(2) > h2:nth-child(4)", "http://www.istinomer.rs/", 0) + System.getProperty("line.separator")
            + util.GetElement2("div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(2) > h3:nth-child(5)","http://www.istinomer.rs/",0);

    vestiDescription7 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription8 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(4) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription9 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(5) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription10 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(6) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);
currency = new String[]{
            vestiDescription1,
            vestiDescription2,
            vestiDescription3,
            vestiDescription4,
            vestiDescription5,
            vestiDescription6,
            vestiDescription7,
            vestiDescription8,
            vestiDescription9,
            vestiDescription10
    };

public String GetElement(String Element, String site, int mode) {
    try {

        Elements newsHeadlines = null;

        if (mode == 0) {
            Document doc = Jsoup.connect(site).timeout(600000).get();
            newsHeadlines = doc.select(Element);
        }
        //1 gets link from class
        else if (mode == 1) {
            Document doc = Jsoup.connect(site).timeout(600000).get();
            String link = doc.select(Element).toString();
            return link;
        }

        //Log.d("TMS", "Data is " + html2text(newsHeadlines.toString()));

        String returnData = html2text(newsHeadlines.toString());
        return returnData;
    }
    catch (Exception e) {
        Log.d("TMS", "EXCEPTION GetElement: " + Element);
        e.printStackTrace();
        return "Error";
    }

知道如何加快速度嗎?

您要求在每次調用GetElement時重復分析同一文檔! 當然慢了!

而是,對JSoup進行一次調用以獲取文檔,然后對所有針對該文檔的查詢使用它返回的Document對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM