这是交易。在我的Android应用程序中,我正在使用Jsoup进行一些网页拼写。现在它工作正常,但它太慢了。我在我的代码中做的是:Android HTML Jsoup解析速度
- 在Jsoup中通过POST方法登录到页面;
- 获取cookies;
- 通过重复使用cookie,我正在浏览6页(POST和GET)并且抓取它们(主要是表格和大量的行,我的意思是LOTS ...所以,真的很多foreach循环);
- 将所有需要的数据写入SQLiteDatabase;
现在的问题是,它在吸收速度。我的意思是,在按下登录按钮之后,应用程序的登录屏幕中,用户必须在3G中等待10秒,并在WiFi中等待8-10秒(取决于WiFi速度)。当他试图检查数据更新时,它会执行相同的算法+比较SQLiteDatabase表数据。
那么,有没有其他的方法来做这个HTML解析 - 刮在android的东西,使其更快?附:我不能伤心地访问数据库。
编辑:
既然你问我刮的内容,这里是你可以不登录访问几页的一个例子(它是不是真的比别人大表): 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秒。
'写入所有需要的数据,以SQLiteDatabase''我没有访问database'选择的答案???? – greenapps 2014-08-27 22:12:37
我正在将下载的数据写入我自己的SQLiteDatabase。由于无法访问我的意思是我无法访问该网站的数据库,所以我必须抓取网站。 很清楚,我在刮大学信息系统网站,但他们还没有授予他们数据库的访问权限。 – env 2014-08-27 22:24:40
如果你的代码要慢,那么你应该在这里发布你的代码,并在互联网上放置一个页面,所以我们不必登录,但可以做一些测试。 – greenapps 2014-08-27 23:22:09