如何用Java在尽可能短的时间内下载包含图像的完整网页?

时间:2017-02-15 16:33:54

标签: java http web-scraping jsoup

我是Java编程的初学者。我正在使用Jsoup来解析this网站。

我想在最短的时间内从网站上下载所有图片。让我用最少的时间来澄清我的意思。我现在使用的方法是:

我通过访问Jsoup创建的DOM来过滤掉html中的所有img元素。

    try {
        String pageLink = baseLink + character;
        pageDOM = Jsoup.connect(pageLink).timeout(0).get(); // timeout(0) to set no timeout limit (infinity)

        //get image link elements ka list by text common to all image links
        Elements imgTags = pageDOM.getElementsByAttributeValueContaining("src", "/CharacterImages");
        List<String> imgLinkList = new ArrayList<>();

        // add links to list
        for (Element imgTag : imgTags) {
            imgLinkList.add(imgTag.absUrl("src")); // get absolute URLs
        }


    } catch (IOException e) {
        System.err.print("IO error.");
    }

然后我遍历imgLinkList并从imgLinkList中的链接下载单个图像。

但这需要很多时间。在下载所有图像之前,我必须等待大约42秒(车载角色,我使用System.currentTimeMillis())。我尝试过使用wget,但需要大约相同的时间。我认为原因是,从imgLinkList到下载图像的每个链接都会触发一个新的http请求。

因此,我尝试在本地下载整个网页,然后过滤掉图像并将其显示在我的程序中。我尝试使用wget下载带有图片的网页:

wget -p "http://chineseetymology.org/CharacterEtymology.aspx?characterInput=%E8%BB%8A&submitButton1=Etymology"

但同样的问题在这里。这需要大约相同的时间。但在Firefox中,我想下载的页面与我的带宽相差10秒或更短。保存网页只需不到5秒。

我如何模仿firefox在这里做什么?有没有办法将所有多个http请求合并为一个请求?为什么Firefox花了这么少的时间来下载我的网页,包括所有图片。

对不起,如果我没有多大意义。这是我的第二篇文章。如果我需要提供更多信息,我将非常乐意这样做。

0 个答案:

没有答案