10 ответов:
вот некоторые проверенный код с помощью Java URL класса. Я бы рекомендовал сделать лучшую работу, чем я здесь, по обработке исключений или передаче их в стек вызовов.
public static void main(String[] args) { URL url; InputStream is = null; BufferedReader br; String line; try { url = new URL("http://stackoverflow.com/"); is = url.openStream(); // throws an IOException br = new BufferedReader(new InputStreamReader(is)); while ((line = br.readLine()) != null) { System.out.println(line); } } catch (MalformedURLException mue) { mue.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } finally { try { if (is != null) is.close(); } catch (IOException ioe) { // nothing to see here } } }
Я бы использовал приличный парсер HTML, как Jsoup. Это тогда так же просто, как:
String html = Jsoup.connect("http://stackoverflow.com").get().html();он обрабатывает gzip и фрагментированные ответы и кодировку символов полностью прозрачно. Он также предлагает больше преимуществ, таких как HTML обход и манипуляции С помощью селекторов CSS, таких как jQuery. Вы только должны захватить его как
Document, а неString.Document document = Jsoup.connect("http://google.com").get();вы действительно не хотите запустить основные строковые методы или даже регулярное выражение на HTML для его обработки.
Читайте также:
ответ Билла очень хорош, но вы можете сделать некоторые вещи с запросом, такие как сжатие или пользовательские агенты. В следующем коде показано, как можно использовать различные типы сжатия для ваших запросов.
URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // Cast shouldn't fail HttpURLConnection.setFollowRedirects(true); // allow both GZip and Deflate (ZLib) encodings conn.setRequestProperty("Accept-Encoding", "gzip, deflate"); String encoding = conn.getContentEncoding(); InputStream inStr = null; // create the appropriate stream wrapper based on // the encoding type if (encoding != null && encoding.equalsIgnoreCase("gzip")) { inStr = new GZIPInputStream(conn.getInputStream()); } else if (encoding != null && encoding.equalsIgnoreCase("deflate")) { inStr = new InflaterInputStream(conn.getInputStream(), new Inflater(true)); } else { inStr = conn.getInputStream(); }чтобы также установить user-agent добавьте следующий код:
conn.setRequestProperty ( "User-agent", "my agent name");
Ну, вы могли бы пойти со встроенными библиотеками, такими как URL и URLConnection, но они не дают очень много контроля.
лично я бы пошел с Apache HTTPClient библиотека.
Edit: HttpClient, который был установлен до конец жизни в Apache. Замена: HTTP компоненты
все вышеперечисленные подходы не скачать текст веб-страницы, как это выглядит в браузере. в наши дни очень много данных загружается в браузеры через скрипты на html страницах. ни один из вышеупомянутых методов не поддерживает скрипты, они просто загружают только текст html. HTMLUNIT поддерживает javascripts. так что если вы хотите скачать текст веб-страницы, как это выглядит в браузере, то вы должны использовать HTMLUNIT.
на Unix / Linux box вы можете просто запустить "wget", но это не совсем вариант, если вы пишете кросс-платформенный клиент. Конечно, это предполагает, что вы действительно не хотите делать много с данными, которые вы загружаете между точкой загрузки и его попадания на диск.
попробуйте использовать библиотеку 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 здесь.
Jetty имеет HTTP-клиент, который можно использовать для загрузки веб-страницы.
package com.zetcode; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; public class ReadWebPageEx5 { public static void main(String[] args) throws Exception { HttpClient client = null; try { client = new HttpClient(); client.start(); String url = "http://www.something.com"; ContentResponse res = client.GET(url); System.out.println(res.getContentAsString()); } finally { if (client != null) { client.stop(); } } } }в Примере выводится содержимое простой веб-страницы.
на чтение веб-страницы на Java учебник я написал шесть примеров загрузки веб-страницы программно на Java с использованием URL, JSoup, HtmlCleaner, Apache HttpClient, Jetty HttpClient и HtmlUnit.
получить помощь от этого класса, получить код и фильтровать информацию.
public class MainActivity расширяет AppCompatActivity {
EditText url; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); url = ((EditText)findViewById( R.id.editText)); DownloadCode obj = new DownloadCode(); try { String des=" "; String tag1= "<div class=\"description\">"; String l = obj.execute( "http://www.nu.edu.pk/Campus/Chiniot-Faisalabad/Faculty" ).get(); url.setText( l ); url.setText( " " ); String[] t1 = l.split(tag1); String[] t2 = t1[0].split( "</div>" ); url.setText( t2[0] ); } catch (Exception e) { Toast.makeText( this,e.toString(),Toast.LENGTH_SHORT ).show(); } } // input, extrafunctionrunparallel, output class DownloadCode extends AsyncTask<String,Void,String> { @Override protected String doInBackground(String... WebAddress) // string of webAddress separate by ',' { String htmlcontent = " "; try { URL url = new URL( WebAddress[0] ); HttpURLConnection c = (HttpURLConnection) url.openConnection(); c.connect(); InputStream input = c.getInputStream(); int data; InputStreamReader reader = new InputStreamReader( input ); data = reader.read(); while (data != -1) { char content = (char) data; htmlcontent+=content; data = reader.read(); } } catch (Exception e) { Log.i("Status : ",e.toString()); } return htmlcontent; } }}
я использовал фактический ответ на этот пост (url) и запись вывода в a файл.
package test; import java.net.*; import java.io.*; public class PDFTest { public static void main(String[] args) throws Exception { try { URL oracle = new URL("http://www.fetagracollege.org"); BufferedReader in = new BufferedReader(new InputStreamReader(oracle.openStream())); String fileName = "D:\a_01\output.txt"; PrintWriter writer = new PrintWriter(fileName, "UTF-8"); OutputStream outputStream = new FileOutputStream(fileName); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); writer.println(inputLine); } in.close(); } catch(Exception e) { } } }
Comments