Как получить исходный код веб-страницы из Java

Я просто хочу получить исходный код любой веб-страницы из Java. На данный момент я нашел множество решений, но не смог найти ни одного кода, который работал бы для всех ссылок ниже:

Основная проблема для меня в том, что некоторые коды извлекают исходный код веб-страницы, но с отсутствующими. Например, приведенный ниже код не работает для первой ссылки.

InputStream is = fURL.openStream(); //fURL can be one of the links above
BufferedReader buffer = null;
buffer = new BufferedReader(new InputStreamReader(is, "iso-8859-9"));

int byteRead;
while ((byteRead = buffer.read()) != -1) {
    builder.append((char) byteRead);
}
buffer.close();
System.out.println(builder.toString());

person brtb    schedule 23.12.2011    source источник
comment
Обратите внимание, что при открытии URL-адреса вы получите только исходный код, который изначально был доставлен. Возможно, через AJAX загружается дополнительный контент, и вы не увидите его, когда просто прочитаете исходный поток. - В качестве примера откройте demo.vaadin.com/sampler в Firefox, а затем откройте исходный код страницы. код. Вы не увидите там источник всего отображаемого контента.   -  person Thomas    schedule 23.12.2011
comment
@cerq: в зависимости от вашего определения исходного кода веб-страницы вы можете или не можете это сделать. Например, можно утверждать, что исходный код, скажем, веб-страницы, созданной с помощью .jsp, является самим файлом .jsp, а не сгенерированный HTML ... То, что вам нужно, это HTML, а не исходный код. Во многих случаях исходный код находится на сервере, и, если не считать пиратского сервера, вы просто не можете получить к нему доступ.   -  person TacticalCoder    schedule 23.12.2011
comment
@ Томас, я думаю, моя проблема в том, что ты рассказываешь. Итак, есть ли способ получить весь отображаемый источник контента?   -  person brtb    schedule 23.12.2011
comment
Что ж, вам нужно выполнить JavaScript. Взгляните на ScriptEngineManager.   -  person Thomas    schedule 23.12.2011
comment
Я задаю точно такой же вопрос, если вы нашли ответ, разместите его здесь. Спасибо!   -  person Hendra Anggrian    schedule 03.06.2014
comment
Возможно, дубликат: Как программно загрузить веб-страницу на Java.   -  person Basil Bourque    schedule 15.06.2014
comment
Люди, которые ищут решение подобных проблем, могут попробовать следующий код:   -  person Ali Safari    schedule 26.02.2020
comment
URL pageURL = новый URL (researchgate.net/); BufferedReader in = новый BufferedReader (новый InputStreamReader (pageURL.openStream ())); Строка fileName = C: \ Users \ Ali \ Desktop \ test.html; PrintWriter writer = новый PrintWriter (имя_файла, UTF-8); String inputLine; в то время как ((inputLine = in.readLine ())! = null) {System.out.println (inputLine); писатель.println (inputLine); } in.close ();   -  person Ali Safari    schedule 26.02.2020


Ответы (3)


Попробуйте следующий код с добавленным свойством запроса:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class SocketConnection
{
    public static String getURLSource(String url) throws IOException
    {
        URL urlObject = new URL(url);
        URLConnection urlConnection = urlObject.openConnection();
        urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");

        return toString(urlConnection.getInputStream());
    }

    private static String toString(InputStream inputStream) throws IOException
    {
        try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")))
        {
            String inputLine;
            StringBuilder stringBuilder = new StringBuilder();
            while ((inputLine = bufferedReader.readLine()) != null)
            {
                stringBuilder.append(inputLine);
            }

            return stringBuilder.toString();
        }
    }
}
person narek.gevorgyan    schedule 23.12.2011
comment
Ни ваш код, ни написанный мной код не работают по ссылке cumhuriyet.com.tr?hn=298710 сначала проверьте свой код. - person brtb; 23.12.2011
comment
System.out.println (getUrlSource (cumhuriyet.com.tr/?hn=298710) ); Ничего страшного - person narek.gevorgyan; 23.12.2011
comment
Он по-прежнему отлично работает - person Kwnstantinos Nikoloutsos; 22.06.2018
comment
Нет вывода для https://community.diabetes.org/discuss - person guroosh; 31.01.2019

Я уверен, что вы нашли решение где-то за последние 2 года, но ниже приводится решение, которое работает для вашего запрашиваемого сайта.

package javasandbox;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
*
* @author Ryan.Oglesby
*/
public class JavaSandbox {

private static String sURL;

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws MalformedURLException, IOException {
    sURL = "http://www.cumhuriyet.com.tr/?hn=298710";
    System.out.println(sURL);
    URL url = new URL(sURL);
    HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
    //set http request headers
            httpCon.addRequestProperty("Host", "www.cumhuriyet.com.tr");
            httpCon.addRequestProperty("Connection", "keep-alive");
            httpCon.addRequestProperty("Cache-Control", "max-age=0");
            httpCon.addRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
            httpCon.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36");
            httpCon.addRequestProperty("Accept-Encoding", "gzip,deflate,sdch");
            httpCon.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
            //httpCon.addRequestProperty("Cookie", "JSESSIONID=EC0F373FCC023CD3B8B9C1E2E2F7606C; lang=tr; __utma=169322547.1217782332.1386173665.1386173665.1386173665.1; __utmb=169322547.1.10.1386173665; __utmc=169322547; __utmz=169322547.1386173665.1.1.utmcsr=stackoverflow.com|utmccn=(referral)|utmcmd=referral|utmcct=/questions/8616781/how-to-get-a-web-pages-source-code-from-java; __gads=ID=3ab4e50d8713e391:T=1386173664:S=ALNI_Mb8N_wW0xS_wRa68vhR0gTRl8MwFA; scrElm=body");
            HttpURLConnection.setFollowRedirects(false);
            httpCon.setInstanceFollowRedirects(false);
            httpCon.setDoOutput(true);
            httpCon.setUseCaches(true);

            httpCon.setRequestMethod("GET");

            BufferedReader in = new BufferedReader(new InputStreamReader(httpCon.getInputStream(), "UTF-8"));
            String inputLine;
            StringBuilder a = new StringBuilder();
            while ((inputLine = in.readLine()) != null)
                a.append(inputLine);
            in.close();

            System.out.println(a.toString());

            httpCon.disconnect();
}
}
person Roglesby    schedule 04.12.2013
comment
помощь никогда не поздно. Но я попробовал ваш код, и он не работает на многих веб-страницах. - person Hendra Anggrian; 03.06.2014
comment
Я согласен с тем, что этот сегмент не будет работать со всеми веб-страницами, поскольку разные страницы возвращают данные в разных форматах, и в некоторых случаях могут потребоваться следующие перенаправления для того, что вы хотите выполнить. в некоторых случаях вы можете получить ответ в виде ответа gzip и обработать его следующим образом InputStream gzippedResponse = httpCon.getInputStream(); InputStream ungzippedResponse = new GZIPInputStream(gzippedResponse); InputStreamReader reader = new InputStreamReader(ungzippedResponse, "UTF-8"); StringWriter writer = new StringWriter(); - person Roglesby; 29.05.2015

person    schedule
comment
Мне не нужен код, который работает для yahoo.com или google.com, пожалуйста, проверьте мою публикацию дважды - person brtb; 23.12.2011