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