Нужна помощь в получении HTML сайта на Java - PullRequest
3 голосов
/ 04 августа 2010

Я получил некоторый код из java httpurlconnection, отключив html , и я почти такой же код для получения html с веб-сайтов на Java. За исключением одного конкретного сайта, с которым я не могу заставить работать этот код:

Я пытаюсь получить HTML с этого сайта:

http://www.geni.com/genealogy/people/William-Jefferson-Blythe-Clinton/6000000001961474289

Но я продолжаю получать ненужные персонажи. Хотя он очень хорошо работает с любым другим сайтом, таким как http://www.google.com.

И вот код, который я использую:

public static String PrintHTML(){
    URL url = null;
    try {
        url = new URL("http://www.geni.com/genealogy/people/William-Jefferson-Blythe-Clinton/6000000001961474289");
    } catch (MalformedURLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    HttpURLConnection connection = null;
    try {
        connection = (HttpURLConnection) url.openConnection();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6");
    try {
        System.out.println(connection.getResponseCode());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    String line;
    StringBuilder builder = new StringBuilder();
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        while ((line = reader.readLine()) != null) {
            builder.append(line);
            builder.append("\n"); 
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    String html = builder.toString();
    System.out.println("HTML " + html);
    return html;
}

Я не понимаю, почему он не работает с URL, который я упомянул выше.

Любая помощь будет оценена.

1 Ответ

7 голосов
/ 04 августа 2010

Этот сайт неправильно отправляет ответ независимо от возможностей клиента. Обычно сервер должен отправлять ответ только в том случае, если клиент поддерживает его (Accept-Encoding: gzip). Вам нужно распаковать его, используя GZIPInputStream.

reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(connection.getInputStream()), "UTF-8"));

Обратите внимание, что я также добавил правильную кодировку в конструктор InputStreamReader. Обычно вы хотите извлечь его из заголовка ответа Content-Type.

Дополнительные подсказки см. Также Как использовать URLConnection для запуска и обработки HTTP-запросов? Если все, что вам нужно, - это анализ / извлечение информации из HTML, тогда я настоятельно рекомендую использовать 1018 * HTML-парсер как у Jsoup.

...