java - Jsoup 安卓解析

标签 java android jsoup

我正在解析一个网页......现在当我完成时......我发现我在做一些非常愚蠢的事情,所以如果有人可以向我指出这一点,请 :) 以及正确的方向。

我有一个使用 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 进行一次调用以获取文档,然后将它返回的文档对象用于针对该文档的所有查询。

关于java - Jsoup 安卓解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35543629/

相关文章:

html - 由于流媒体网站导致 Jsoup 延迟

android - 为什么 setOnShowListener 从未被调用过?

android - 如何在 android fragment 中实例化 YoutubePlayerView

android - 来自 texturepacker xml 的动画 Sprite

java - 如何在 Android Studio 中添加 commons-math 库

java - 使用 JSoup 解析 HTML(格式不正确)

java - Jsoup 将 HTML 属性的输出从单引号更改为双引号

java - 从数组开始解析 JSON api - [

java - jsp中使用session的登录页面

Java Mapreduce group by compositekey 和排序