有没有什么比Jsoup更快的HTML抓取?

ser*_*ero 9 android jsoup

因此,我正在构建一个应用程序,从我访问的网站中以更友好的用户界面显示图像板.目前它存在很多问题,但现在最大的问题是获取图像以显示它们.

我现在拥有它的方式,图像显示在大小为12的GridView中,镜像了图像板每页上的图像数量.我正在使用Jsoup来抓取页面,以便在GridView中显示缩略图图像URL,以及获取用户点击缩略图时要显示的全尺寸图像的URL.

现在的问题是,Jsoup平均需要8-12秒来获取HTML页面.我发现这是不可接受的,我想知道是否有任何方法可以加快速度,或者这是否是一个我无法做任何事情的固有瓶颈.

这是我用来获取页面的代码:

try {
    Document doc = Jsoup.connect(url).get();
    Elements links = doc.select("img[src*=/alt2/]");
    for (Element link : links) {
        thumbURL = link.attr("src");
        linkURL = thumbURL.replace("/alt2/", "/").replace("s.jpg", ".jpg");
        imgSrc.add(new Pair<String, String>(thumbURL, linkURL));
    }
}
catch {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

ian*_*mas 6

我使用Jsoup作为TLFN刮刀,我对速度没有任何问题.你应该缩小瓶颈.我认为你的刮擦是造成速度问题的原因.尝试分别跟踪您的选择器和网络流量,看看应该责怪哪个.如果您的选择器受到责备,那么请考虑寻找另一种方法来查询和对结果进行基准测试.

为了更快,更一般的想法,测试你总是可以从普通的Java项目运行Jsoup,当你觉得你已经改进它时,把它扔回设备上,看看它是否有类似的性能改进.

编辑

不是这是你的问题,但要注意使用迭代器'可以'导致相当多的垃圾收集触发.通常情况下这并不是一个问题,尽管如果你在许多重复使用它们的地方使用它们,它们可能会导致某些设备受到明显的性能影响.

不是很好

for (Element link : links)
Run Code Online (Sandbox Code Playgroud)

更好

int i;
Element tempLink;
for (i=0;i<links.size();i++) {
   tempLink = links.get(i);
}
Run Code Online (Sandbox Code Playgroud)

编辑2

如果图像URL以/ alt2 /开头,您可以使用^ =而不是*=这可能会使搜索更快.此外,根据HTML的数量,您可能会浪费大量时间在这些图像的完全错误的位置查找.检查这些图像是否包装在可识别的容器内,例如<div class="posts">.如果您可以缩小HTML的数量来筛选它可能会提高性能.