Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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
Java 使用Crawljax还可以从网页下载文件_Java_Download_Web Crawler - Fatal编程技术网

Java 使用Crawljax还可以从网页下载文件

Java 使用Crawljax还可以从网页下载文件,java,download,web-crawler,Java,Download,Web Crawler,我正试图用Java编写自己的爬行JAX 3.6插件。它应该告诉crawljax这是一个非常著名的网络爬虫也下载文件,他在网页上找到的。(PDF、图像等)。我不想要只有HTML或实际的DOM树。我想访问他找到的文件(PDF,jpg) 我如何告诉crawljax下载PDF文件、图像等? 谢谢你的帮助 这就是我目前所拥有的-一个使用默认插件的新类(概述): 就图像而言,我看不出有任何问题,crawjax加载这些图像对我来说很好 关于PDF主题: 不幸的是,Crawljax被硬编码为跳过指向PDF文件的

我正试图用Java编写自己的爬行JAX 3.6插件。它应该告诉crawljax这是一个非常著名的网络爬虫也下载文件,他在网页上找到的。(PDF、图像等)。我不想要只有HTML或实际的DOM树。我想访问他找到的文件(PDF,jpg)

我如何告诉crawljax下载PDF文件、图像等?

谢谢你的帮助

这就是我目前所拥有的-一个使用默认插件的新类(概述):


就图像而言,我看不出有任何问题,crawjax加载这些图像对我来说很好

关于PDF主题: 不幸的是,Crawljax被硬编码为跳过指向PDF文件的链接

请参见com.crawljax.core.CandidateElementExtractor:342:

/**
 * @param href
 *            the string to check
 * @return true if href has the pdf or ps pattern.
 */
private boolean isFileForDownloading(String href) {
    final Pattern p = Pattern.compile(".+.pdf|.+.ps|.+.zip|.+.mp3");
    Matcher m = p.matcher(href);

    if (m.matches()) {
        return true;
    }

    return false;
}
这可以通过修改Crawljax源代码并为上面的模式引入一个配置选项来解决

在此之后,Selenium对非HTML文件的限制适用:在Firefox JavaScript PDF viewer中查看PDF,出现下载弹出窗口或下载文件。可以与JavaScript查看器交互,也不可能与下载弹出窗口交互,但如果启用了自动下载,则文件将下载到磁盘

如果要将Firefox设置为自动下载文件而不弹出下载对话框:

import javax.inject.Provider;

static class MyFirefoxProvider implements Provider<EmbeddedBrowser> {

    @Override
    public EmbeddedBrowser get() {
        FirefoxProfile profile = new FirefoxProfile();
        profile.setPreference("browser.download.folderList", 2);
        profile.setPreference("browser.download.dir", "/tmp");
        profile.setPreference("browser.helperApps.neverAsk.saveToDisk",
            "application/octet-stream,application/pdf,application/x-gzip");

        // disable Firefox's built-in PDF viewer
        profile.setPreference("pdfjs.disabled", true);
        // disable Adobe Acrobat PDF preview plugin
        profile.setPreference("plugin.scan.plid.all", false);
        profile.setPreference("plugin.scan.Acrobat", "99.0");

        FirefoxDriver driver = new FirefoxDriver(profile);

        return WebDriverBackedEmbeddedBrowser.withDriver(driver);
    }
}

通过使用
getStrippedDom()
上的CSS选择器
a[href]
使用Jsoup手动获取链接,迭代元素并使用
HttpURLConnection
/
HttpsURLConnection
下载链接。

如何获取和显示所有数据?
import javax.inject.Provider;

static class MyFirefoxProvider implements Provider<EmbeddedBrowser> {

    @Override
    public EmbeddedBrowser get() {
        FirefoxProfile profile = new FirefoxProfile();
        profile.setPreference("browser.download.folderList", 2);
        profile.setPreference("browser.download.dir", "/tmp");
        profile.setPreference("browser.helperApps.neverAsk.saveToDisk",
            "application/octet-stream,application/pdf,application/x-gzip");

        // disable Firefox's built-in PDF viewer
        profile.setPreference("pdfjs.disabled", true);
        // disable Adobe Acrobat PDF preview plugin
        profile.setPreference("plugin.scan.plid.all", false);
        profile.setPreference("plugin.scan.Acrobat", "99.0");

        FirefoxDriver driver = new FirefoxDriver(profile);

        return WebDriverBackedEmbeddedBrowser.withDriver(driver);
    }
}
BrowserConfiguration bc = 
new BrowserConfiguration(BrowserType.FIREFOX, 1, new MyFirefoxProvider());