Вопрос

Я хотел бы использовать java, чтобы получить исходный код веб-сайта (безопасный), а затем проанализировать этот веб-сайт на наличие ссылок, которые есть на нем.Я нашел, как подключиться к этому URL, но тогда как я могу легко получить только исходный код, предпочтительнее использовать его в качестве DOM-документа oso, чтобы я мог легко получить нужную мне информацию?

Или есть лучший способ подключиться к сайту https, получить исходный код (который я собираюсь сделать, чтобы получить таблицу данных ... это довольно просто), тогда эти ссылки являются файлами, которые я собираюсь загрузить.

Я хотел бы, чтобы это был FTP, но это файлы, хранящиеся на моем tivo (я хочу программно загрузить их на свой компьютер (

Это было полезно?

Решение

Вы можете получить низкий уровень и просто запросить его с помощью сокета. В Java это выглядит так

// Arg[0] = Hostname
// Arg[1] = File like index.html
public static void main(String[] args) throws Exception {
    SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();

    SSLSocket sslsock = (SSLSocket) factory.createSocket(args[0], 443);

    SSLSession session = sslsock.getSession();
    X509Certificate cert;
    try {
        cert = (X509Certificate) session.getPeerCertificates()[0];
    } catch (SSLPeerUnverifiedException e) {
        System.err.println(session.getPeerHost() + " did not present a valid cert.");
        return;
    }

    // Now use the secure socket just like a regular socket to read pages.
    PrintWriter out = new PrintWriter(sslsock.getOutputStream());
    out.write("GET " + args[1] + " HTTP/1.0\r\n\r\n");
    out.flush();

    BufferedReader in = new BufferedReader(new InputStreamReader(sslsock.getInputStream()));
    String line;
    String regExp = ".*<a href=\"(.*)\">.*";
    Pattern p = Pattern.compile( regExp, Pattern.CASE_INSENSITIVE );

    while ((line = in.readLine()) != null) {
        // Using Oscar's RegEx.
        Matcher m = p.matcher( line );  
        if( m.matches() ) {
            System.out.println( m.group(1) );
        }
    }

    sslsock.close();
}

Другие советы

Вероятно, вы могли бы получить лучшие результаты от вариантов Пита или сктрди.Вот дополнительный способ, если вы хотели бы знать, как это сделать "by имел"

Я не очень хорош в регулярных выражениях, поэтому в данном случае оно возвращает последнюю ссылку в строке.Что ж, это только начало.

import java.io.*;
import java.net.*;
import java.util.regex.*;

public class Links { 
    public static void main( String [] args ) throws IOException  { 

        URL url = new URL( args[0] );
        InputStream is = url.openConnection().getInputStream();

        BufferedReader reader = new BufferedReader( new InputStreamReader( is )  );

        String line = null;
        String regExp = ".*<a href=\"(.*)\">.*";
        Pattern p = Pattern.compile( regExp, Pattern.CASE_INSENSITIVE );

        while( ( line = reader.readLine() ) != null )  {
            Matcher m = p.matcher( line );  
            if( m.matches() ) {
                System.out.println( m.group(1) );
            }
        }
        reader.close();
    }
}

Редактировать

Упс, я совершенно пропустил "безопасную" часть.В любом случае, я ничего не мог с собой поделать, мне пришлось написать этот пример: P

Попробуйте HttpUnit или HttpClient . Хотя первый якобы предназначен для написания интеграционных тестов, он имеет удобный API-интерфейс для программной итерации по ссылкам веб-страницы, с чем-то вроде следующего использования WebResponse.getLinks () :

WebConversation wc = new WebConversation();
WebResponse resp = wc.getResponse("http://stackoverflow.com/questions/422970/");
WebLink[] links = resp.getLinks();
// Loop over array of links...

Вы можете использовать javacurl , чтобы получить html сайта, и Java DOM для его анализа.

Попробуйте использовать библиотеку jsoup.

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;


public class ParseHTML {

    public static void main(String args[]) throws IOException{
        Document doc = Jsoup.connect("https://www.wikipedia.org/").get();
        String text = doc.body().text();

        System.out.print(text);
    }
}

Вы можете загрузить библиотеку jsoup здесь .

В веб-контексте есть два значения souce:

Источник HTML: Если вы запрашиваете веб-страницу по URL, вы всегда получаете исходный код HTML. На самом деле, ничего другого, что вы могли бы получить по URL. Веб-страницы всегда передаются в исходном виде, такого понятия как скомпилированная веб-страница не существует. И для того, что вы пытаетесь, этого должно быть достаточно для выполнения вашей задачи.

Источник сценария: Если веб-страница генерируется динамически, то она кодируется на некотором языке сценариев на стороне сервера (например, PHP, Ruby, JSP ...). Также существует исходный код на этом уровне. Но используя HTTP-соединение, вы не можете получить этот вид исходного кода. Это не отсутствующая функция , а целиком.

Парсинг . Сказав это, вам нужно как-то разобрать HTML-код. Если вам просто нужны ссылки, использование RegEx (как показал Оскар Рейес) будет наиболее практичным подходом, но вы также можете написать простой парсер & Quot; вручную & Quot ;. Было бы медленно, больше кода ... но работает.

Если вы хотите расширить доступ к коду на более логичном уровне, лучше всего разобрать его в DOM. Если код допустимый XHTML , вы можете просто проанализировать его в org.w3c.dom.Document и сделать с ним что угодно. Если это по крайней мере действительный HTML , вы можете применить некоторые приемы, чтобы преобразовать его в XHTML (в некоторых редких случаях заменить & Lt; br & Gt; на & Lt; br / &> и достаточно изменить тип документа) и использовать его как XML.

Если это не правильный XML, вам понадобится анализатор HTML DOM. Я понятия не имею, существует ли такая вещь для Java и работает ли она хорошо.

Существует существующий FTP-сервер, который можно установить на вашем Tivo, чтобы разрешить показывать загрузки, см. здесь http://dvrpedia.com / MFS_FTP

Вопрос сформулирован по-другому (как обращаться с http / html в java), но в конце вы упоминаете, что вы хотите, чтобы загрузить шоу. Tivo использует собственную уникальную файловую систему (MFS - Media File System), поэтому не так просто смонтировать диск на другом компьютере - вместо этого проще запустить http или ftp-сервер на Tivo и загрузить их с этих

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top