Frage

Ich arbeite an einer Anwendung, die die Quelle einer Webseite von einem Link erhalten muss, und dann zu analysieren, um die html von dieser Seite aus.

Könnten Sie einige Beispiele geben Sie mir, oder Punkte beginnen, wo sie suchen zu starten, eine solche App zu schreiben?

War es hilfreich?

Lösung

Sie können mit Httpclient eine HTTP-GET und rufen Sie die HTML-Antwort, etwa wie folgt auszuführen:

HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);

String html = "";
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder str = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null)
{
    str.append(line);
}
in.close();
html = str.toString();

Andere Tipps

Ich würde vorschlagen, jsoup .

Laut ihrer Website:

Fetch die Wikipedia-Homepage, analysiert es zu einem DOM, und wählen Sie die Schlagzeilen aus dem in dem News-Bereich in eine Liste der Elemente (Online-Probe):

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");

Erste Schritte:

  1. Herunterladen die jsoup jar Core-Bibliothek
  2. Lesen Sie die Kochbuch Einführung

Diese Frage ist ein bisschen alt, aber ich dachte, ich meine Antwort schreiben soll jetzt, dass DefaultHttpClient, HttpGet usw. sind veraltet. Diese Funktion sollte HTML bekommen und zurückkehren, da eine URL.

public static String getHtml(String url) throws IOException {
    // Build and set timeout values for the request.
    URLConnection connection = (new URL(url)).openConnection();
    connection.setConnectTimeout(5000);
    connection.setReadTimeout(5000);
    connection.connect();

    // Read and store the result line by line then return the entire string.
    InputStream in = connection.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    StringBuilder html = new StringBuilder();
    for (String line; (line = reader.readLine()) != null; ) {
        html.append(line);
    }
    in.close();

    return html.toString();
}
public class RetrieveSiteData extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
    StringBuilder builder = new StringBuilder(100000);

    for (String url : urls) {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {
            HttpResponse execute = client.execute(httpGet);
            InputStream content = execute.getEntity().getContent();

            BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
            String s = "";
            while ((s = buffer.readLine()) != null) {
                builder.append(s);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    return builder.toString();
}

@Override
protected void onPostExecute(String result) {

}
}

Wenn Sie einen Blick hier oder < a href = „http://htmlparser.sourceforge.net/“ rel = „nofollow noreferrer“> hier , werden Sie sehen, dass Sie nicht, dass direkt mit android API tun können, eine externe librairy benötigen .. .

Sie können zwischen 2 hier ist hier oben wählen, ob Sie eine externe librairy benötigen.

Nennen Sie es wie

new RetrieveFeedTask(new OnTaskFinished()
        {
            @Override
            public void onFeedRetrieved(String feeds)
            {
                //do whatever you want to do with the feeds
            }
        }).execute("http://enterurlhere.com");

RetrieveFeedTask.class

class RetrieveFeedTask extends AsyncTask<String, Void, String>
{
    String HTML_response= "";

    OnTaskFinished onOurTaskFinished;


    public RetrieveFeedTask(OnTaskFinished onTaskFinished)
    {
        onOurTaskFinished = onTaskFinished;
    }
    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... urls)
    {
        try
        {
            URL url = new URL(urls[0]); // enter your url here which to download

            URLConnection conn = url.openConnection();

            // open the stream and put it into BufferedReader
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            String inputLine;

            while ((inputLine = br.readLine()) != null)
            {
                // System.out.println(inputLine);
                HTML_response += inputLine;
            }
            br.close();

            System.out.println("Done");

        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return HTML_response;
    }

    @Override
    protected void onPostExecute(String feed)
    {
        onOurTaskFinished.onFeedRetrieved(feed);
    }
}

OnTaskFinished.java

public interface OnTaskFinished
{
    public void onFeedRetrieved(String feeds);
}

Einer der anderen SO post Antwort hat mir geholfen. Dies gilt nicht Zeile für Zeile lesen; supposingly die HTML-Datei hatte eine Zeile null dazwischen. Als Vorkenntnis hinzufügen, um diese Abhängung von Projekteinstellungen "com.koushikdutta.ion: ion: 2.2.1" implementieren diesen Code in AsyncTask . Wenn Sie die zurückgegebene wollen -Etwas -. in UI-Thread zu sein, es zu einer gegenseitigen Schnittstelle passiert

Ion.with(getApplicationContext()).
load("https://google.com/hashbrowns")
.asString()
.setCallback(new FutureCallback<String>()
 {
        @Override
        public void onCompleted(Exception e, String result) {
            //int s = result.lastIndexOf("user_id")+9;
            // String st = result.substring(s,s+5);
           // Log.e("USERID",st); //something

        }
    });
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top