鑑於link
,比如說,Java.sg/downloads
,我需要抓取它以查找各種zip文件並下載它們。是否有現有的apache commons library
來執行此任務?apache通用庫,用於通過http s協議下載文件
0
A
回答
-1
0
我不知道是否有一個Apache庫,但我使用htmlunit以抓取網頁和所有它的子代碼頁如下。然後可以通過URLConnection完成下載,參見例如。 this page。
public static void walkAllHtmlPages(final String startURL) throws IOException, SAXException {
final WebClient webClient = createWebClient();
try {
final HtmlPage page = webClient.getPage(startURL);
try {
Set visitedURLs = new HashSet();
List links = page.getAnchors();
// now recursively walk all pages
recursivelyFollowLinks(webClient, links, visitedURLs);
} finally {
if(page != null) {
page.cleanUp();
}
}
} finally {
webClient.closeAllWindows();
}
}
public static WebClient createWebClient() {
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
webClient.setTimeout(30000);
webClient.setJavaScriptEnabled(false);
webClient.setCssEnabled(true);
webClient.setAppletEnabled(true);
webClient.setRedirectEnabled(true); // follow old-school HTTP 302 redirects - standard behaviour
webClient.setHTMLParserListener(null);
webClient.setIncorrectnessListener(new IncorrectnessListener() {
@Override
public void notify(String message, Object origin) {
// Swallow for now, but maybe collect it for optional retrieval?
}
});
webClient.setCssErrorHandler(new SilentCssErrorHandler());
return webClient;
}
private static void recursivelyFollowLinks(WebClient webClient, List links, Set visitedURLs) throws SAXException, IOException {
try {
for(HtmlAnchor link : links) {
String url = link.getHrefAttribute();
if (!visitedURLs.contains(url)) {
visitedURLs.add(url);
visitSubLink(webClient, visitedURLs, link, url);
}
}
} catch (RuntimeException e) {
throw new IllegalArgumentException("While retrieving links: " + getLinksAsString(links), e);
}
}
private static void visitSubLink(WebClient webClient,
Set visitedURLs, HtmlAnchor link, String url) throws IOException, SAXException {
URL current = link.getPage().getUrl();
try {
HtmlPage ret = (HtmlPage)link.click();
List sublinks = ret.getAnchors();
recursivelyFollowLinks(webClient, sublinks, visitedURLs);
} catch (RuntimeException e) { // NOPMD
throw new RuntimeException("While clicking link: " + link.getId() + " to " + url, e);
}
}
相關問題
- 1. 通過HTTPS協議從FTPS文件夾下載文件
- 2. 哪個協議通過Apache與數據庫通信?
- 3. 從iPhone通過FTP協議上傳/下載文件
- 4. 使用ffmpeg庫通過http協議編碼視頻流
- 5. Apache Tomcat將使用非阻塞http協議關閉文件下載連接
- 6. 通過Apache和Tomcat的WebSockets:AJP協議不支持HTTP升級
- 7. 通過非HTTP協議的SOAP
- 8. 通過http尋找API /協議
- 9. 在Loadrunner中通過http協議的java
- 10. 通過HTTP協議抓取VLC幀
- 11. 通過HTTP的二進制協議
- 12. FTP通過HTTP的協議規範
- 13. 通過http-auth下載文件
- 14. 通過Net :: HTTP下載壓縮文件
- 15. 通過HTTP從Gerrit下載文件夾
- 16. 用於從文件服務器下載文件的協議
- 17. Swift協議專用通用協議
- 18. 使用哪種協議從Rapid share Http或FTP下載文件?
- 19. 使用http協議,java和javascript下載大文件> 1GB
- 20. 通過http加載文件
- 21. 使用Javascript通過HTTP協議以外的協議連接服務器
- 22. 如何正確地通過python-urllib2通過HTTP下載文件?
- 23. 如何測試HTML是從文件系統加載還是通過http協議
- 24. 如何使通過http協議瀏覽SVN倉庫
- 25. 用於漸進式下載的RTSP或HTTP協議
- 26. 具有通用協議類型變量的通用協議
- 27. 如何用c語言通過tcp以http協議發送html文件?
- 28. 通過Apache比使用PHP讀取文件更慢的下載
- 29. 使用Apache CXF通過Web服務下載文件
- 30. 使用HTTP協議通過TCP套接字獲取圖像
爲什麼downvote? Wget可以單獨使用或從Java中調用,它包含了一個強大的,經過測試的軟件包中的所有必需的功能。 – dotancohen 2012-03-01 10:08:23