Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
下载所有图像,就像wget在客户端使用Java一样_Java_Html_Wget_Apache Httpclient 4.x - Fatal编程技术网

下载所有图像,就像wget在客户端使用Java一样

下载所有图像,就像wget在客户端使用Java一样,java,html,wget,apache-httpclient-4.x,Java,Html,Wget,Apache Httpclient 4.x,这很容易理解 但我在客户端需要这个特性,最好是Java 我知道wget的源代码可以在线访问,但我不知道任何C语言,而且源代码非常复杂。当然,wget还有其他一些特性,这些特性对我来说“炸毁了源代码” 由于Java有一个内置的HttpClient,但我不知道wget到底有多复杂,您能告诉我在Java中重新实现“递归下载所有图像”功能是否困难吗 这到底是怎么做到的?wget是否提取给定URL的HTML源代码,从HTML中提取具有给定文件结尾(.jpg、.png)的所有URL并下载它们?它是否也在HT

这很容易理解

但我在客户端需要这个特性,最好是Java

我知道wget的源代码可以在线访问,但我不知道任何C语言,而且源代码非常复杂。当然,wget还有其他一些特性,这些特性对我来说“炸毁了源代码”

由于Java有一个内置的
HttpClient
,但我不知道wget到底有多复杂,您能告诉我在Java中重新实现“递归下载所有图像”功能是否困难吗

这到底是怎么做到的?wget是否提取给定URL的HTML源代码,从HTML中提取具有给定文件结尾(.jpg、.png)的所有URL并下载它们?它是否也在HTML文档中链接的样式表中搜索图像

你会怎么做?您是否会使用正则表达式在HTML文档中搜索(相对和绝对)图像URL,并让
HttpClient
下载每个URL?或者已经有类似的Java库了吗?

找到了可以下载图像的库。它是开源的

您可以使用
标签在网站上获取图像。看看下面的问题。这可能对你有帮助。

找到下载图像的文件。它是开源的

您可以使用
标签在网站上获取图像。看看下面的问题。这可能对你有帮助。

在Java中,你可以使用库解析任何网页并提取任何你想要的内容

在Java中,你可以使用库解析任何网页并提取任何你想要的内容

对我来说,是一个递归地抓取(和复制)网站的开源库,例如这样(他们的快速启动示例): (它也是

公共类MyCrawler扩展WebCrawler{
private final static Pattern FILTERS=Pattern.compile(“.*(\\)(css|js|gif|jpg)”
+“| png | mp3 | mp3 | zip | gz))$”;
/**
*此方法接收两个参数。第一个参数是页面
*其中我们发现了这个新的url,第二个参数是
*新url。您应该实现此函数以指定
*给定的url是否应该爬网(根据爬网逻辑)。
*在本例中,我们指示爬虫忽略
*具有css、js、git等扩展,并且只接受以
*有“http://www.ics.uci.edu/“在这种情况下,我们不需要
*referringPage参数以进行决策。
*/
@凌驾
公共布尔值应访问(页面引用页面、WebURL){
String href=url.getURL().toLowerCase();
return!FILTERS.matcher(href.matches())
&&href.startsWith(“http://www.ics.uci.edu/");
}
/**
*在获取页面并准备就绪时调用此函数
*由您的程序处理。
*/
@凌驾
公众访问(第页){
字符串url=page.getWebURL().getURL();
System.out.println(“URL:+URL”);
if(page.getParseData()实例为HtmlParseData){
HtmlParseData HtmlParseData=(HtmlParseData)page.getParseData();
String text=htmlParseData.getText();
字符串html=htmlParseData.getHtml();
Set links=htmlParseData.getOutgoingUrls();
System.out.println(“文本长度:+Text.length());
System.out.println(“Html长度:+Html.length());
System.out.println(“传出链接数:+links.size());
}
}
}
可以找到更多的WebCrawler和HTML解析器。

对我来说是递归地抓取(和复制)站点的开源库,例如,像这样(他们的快速入门示例): (它也是

公共类MyCrawler扩展WebCrawler{
private final static Pattern FILTERS=Pattern.compile(“.*(\\)(css|js|gif|jpg)”
+“| png | mp3 | mp3 | zip | gz))$”;
/**
*此方法接收两个参数。第一个参数是页面
*其中我们发现了这个新的url,第二个参数是
*新url。您应该实现此函数以指定
*给定的url是否应该爬网(根据爬网逻辑)。
*在本例中,我们指示爬虫忽略
*具有css、js、git等扩展,并且只接受以
*有“http://www.ics.uci.edu/“在这种情况下,我们不需要
*referringPage参数以进行决策。
*/
@凌驾
公共布尔值应访问(页面引用页面、WebURL){
String href=url.getURL().toLowerCase();
return!FILTERS.matcher(href.matches())
&&href.startsWith(“http://www.ics.uci.edu/");
}
/**
*在获取页面并准备就绪时调用此函数
*由您的程序处理。
*/
@凌驾
公众访问(第页){
字符串url=page.getWebURL().getURL();
System.out.println(“URL:+URL”);
if(page.getParseData()实例为HtmlParseData){
HtmlParseData HtmlParseData=(HtmlParseData)page.getParseData();
String text=htmlParseData.getText();
字符串html=htmlParseData.getHtml();
Set links=htmlParseData.getOutgoingUrls();
System.out.println(“文本长度:+Text.length());
System.out.println(“Html长度:+Html.length());
System.out.println(“传出链接数:+links.size());
}
}
}
可以找到更多的WebCrawler和HTML解析器。

谢谢!虽然“Java图像下载器”(第一个链接)似乎不是解决方案,“HtmlUnit”似乎很有趣。然而,它不会
public class MyCrawler extends WebCrawler {

    private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|gif|jpg"
                                                           + "|png|mp3|mp3|zip|gz))$");

    /**
     * This method receives two parameters. The first parameter is the page
     * in which we have discovered this new url and the second parameter is
     * the new url. You should implement this function to specify whether
     * the given url should be crawled or not (based on your crawling logic).
     * In this example, we are instructing the crawler to ignore urls that
     * have css, js, git, ... extensions and to only accept urls that start
     * with "http://www.ics.uci.edu/". In this case, we didn't need the
     * referringPage parameter to make the decision.
     */
     @Override
     public boolean shouldVisit(Page referringPage, WebURL url) {
         String href = url.getURL().toLowerCase();
         return !FILTERS.matcher(href).matches()
                && href.startsWith("http://www.ics.uci.edu/");
     }

     /**
      * This function is called when a page is fetched and ready
      * to be processed by your program.
      */
     @Override
     public void visit(Page page) {
         String url = page.getWebURL().getURL();
         System.out.println("URL: " + url);

         if (page.getParseData() instanceof HtmlParseData) {
             HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();
             String text = htmlParseData.getText();
             String html = htmlParseData.getHtml();
             Set<WebURL> links = htmlParseData.getOutgoingUrls();

             System.out.println("Text length: " + text.length());
             System.out.println("Html length: " + html.length());
             System.out.println("Number of outgoing links: " + links.size());
         }
    }
}