كيفية الحصول على مصدر HTML لصفحة من رابط HTML في Android؟

StackOverflow https://stackoverflow.com/questions/2423498

  •  19-09-2019
  •  | 
  •  

سؤال

أنا أعمل في تطبيق يحتاج إلى الحصول على مصدر صفحة ويب من رابط، ثم تحليل HTML من تلك الصفحة.

هل يمكن أن تعطيني بعض الأمثلة، أو النقاط البدء حيث يجب أن ننظر إلى بدء كتابة مثل هذا التطبيق؟

هل كانت مفيدة؟

المحلول

يمكنك استخدام httpclient. لأداء HTTP Get واسترداد استجابة HTML، شيء من هذا القبيل:

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();

نصائح أخرى

أود أن أقترح jsoug..

وفقا لموقعهم:

جلب The Wikipedia الصفحة الرئيسية، تحليلها إلى DOM، وحدد العناوين الرئيسية من قسم الأخبار في قائمة العناصر (عينة عبر الإنترنت):

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

ابدء:

  1. تحميل مكتبة JSOV جرة الأساسية
  2. إقرأ ال كتاب الطبخ المقدمة

هذا السؤال قديم قليلا، لكنني أحسب أنني يجب أن نشر إجابتي الآن ذلك DefaultHttpClient, HttpGet, ، إلخ. يتم إهمالها. يجب أن تحصل هذه الوظيفة وإرجاع HTML، مع إعطاء عنوان 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) {

}
}

إذا كان لديك نظرة هنا أو هنا, ، سترى أنه لا يمكنك القيام بذلك مباشرة مع Android API، فأنت بحاجة إلى Library خارجي ...

يمكنك الاختيار بين Hereabove 2 هنا إذا كنت بحاجة إلى Librairy خارجي.

نسميها

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

RetriveFeedTask.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);
}

واحد من الآخر لذا آخر إجابة ساعدني. هذا لا يقرأ الخط حسب الخط؛ من ينفذ أن ملف HTML لديه خط باطل ما بين أثنين. كما هو شرط مسبق إضافة هذا الاعتماد من إعدادات المشروع "com.koushikdutta.ion: أيون: 2.2.1" تنفيذ هذا الرمز في asynctask.. وبعد إذا كنت تريد العودة -شيئا ما- أن تكون في موضوع UI، اجتيازها إلى واجهة متبادلة.

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

        }
    });
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top