Android HTML Jsoup解析速度

 林林7089 发布于 2022-12-25 13:59

这是交易.在我的Android应用程序中,我正在使用Jsoup进行一些网络抓取.现在它工作正常,但它太慢了.我在我的代码中做的是:

    在Jsoup中通过POST方法登录页面;

    获取cookie;

    通过重用cookie我将经历6个页面(POST和GET)并抓取它们(主要是表格和许多行.我的意思是很多......所以,真的很多foreach循环);

    将所有必需的数据写入SQLiteDatabase;

现在问题是它速度很快.我的意思是,在按下登录按钮后,在应用程序的登录界面中,用户必须在3G中等待10秒,在WiFi中等待8-10秒(取决于WiFi速度).当他试图检查数据更新时,它会执行相同的算法+比较SQLiteDatabase表数据.

那么,有没有其他方法来做这个HTML解析 - 在android中刮掉东西以使其更快?PS我遗憾地无法访问数据库.

编辑:

既然你问过我正在抓取的内容,这里是你可以在不登录的情况下访问的几个页面的一个例子(与其他人相比,这不是一个很大的表):https://medeine.vgtu.lt/programos/ programa.jsp?sid = F&fak = 5&prog = 87&rus = U&klb = en.

现在,对于代码......我真的不能给你完整的代码,但这里是我如何得到表格的每个单元格的例子:

document = Jsoup.connect(getContext().getString(R.string.url))
                    .cookie("JSESSIONID", cookie)
                    .get();

            Element table = document.select("table.duomenys").first();
            if (table != null) {
                databaseHandler.openDatabase();
                databaseHandler.getDatabase().beginTransaction();
                try {
                    for (Element row : table.select("tr.n, tr.l") {
                        Elements columns = row.select("td");
                        addItem(columns, DatabaseHandler.getTableName());
                    }
                    databaseHandler.getDatabase().setTransactionSuccessful();
                } finally {
                    databaseHandler.getDatabase().endTransaction();
                }
                databaseHandler.closeDatabase();
            }

这是addItem()方法示例:

private void addItem(Elements columns, String tableName) {
    databaseHandler.addItem(new Item(
            columns.get(0).text(),
            columns.get(1).text(),
            columns.get(3).text(),
            columns.get(4).text()
    ), tableName);
}

它只是一页.其中有6个,其中很少有更大.当然这是在AsyncTaskLoader的loadInBackground()方法中完成的.

编辑2:

Connection.Response response = Jsoup.connect("https://medeine.vgtu.lt/studentams/submit.jsp")
                .data("studKnNr", id, "asmKodas", password)
                .timeout(3000)
                .method(Connection.Method.POST)
                .execute();

        String cookie = response.cookie("JSESSIONID");

        Document document = Jsoup.connect(modules_url)
                .cookie(cookie_id, cookie)
                .get();

当我想到它时...可能不是解析速度慢,而是登录并重定向到6页,在这种情况下我什么都不做?现在我注意到在Connection.Response中通过.execute()发送POST到服务器并且获取cookie需要大约2.5秒.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有