我是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花了这么少的时间来下载我的网页,包括所有图片。
对不起,如果我没有多大意义。这是我的第二篇文章。如果我需要提供更多信息,我将非常乐意这样做。