Как спарсить данные сайта в android приложении?

Всем привет, начинаю разрабатывать под android и задался вопросом. Как можно спарсить данные с сайта в приложении android?

Немного погуглив написал такой код
public class MainActivity extends Activity {
 
    /** Called when the activity is first created. */
    Button butTest;
    TextView textView;
    String title;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        butTest = (Button)findViewById(R.id.button);
        textView = (TextView)findViewById(R.id.textView);
        new MyParser().execute("http://beastinvest.su/");
        butTest.setOnClickListener(butOncl);
    }
 
    private View.OnClickListener butOncl = new View.OnClickListener() {
        public void onClick(View v) {
            onPostExecute(title);
        }
    };
    public class MyParser extends AsyncTask<String, Void, String> {
 
        @Override
        protected String doInBackground(String... links) {
            Document doc = null;
 
            try {
                doc = Jsoup.connect(links[0]).get();
                title = doc.title();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
 
    }
    public void onPostExecute(String result) {
        textView.setText(title);
    }
 
}


Но он отказался работать. Позже один добрый человек сказал что у сайта защита от ддос - запрос разворачивает "Для посещения этого сайта необходима поддержка javacript и cookies Вашим браузером".

Этот же человек предложил сделать парсер через webview
MAIN_ACTIVITY

package com.admin.beastinvest;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

/**
 *
 * Launcher activity.
 *
 */
public class MainActivity extends Activity implements LoadListener {

    private static final String LOAD_URL = "http://beastinvest.su";
    private static final String LOAD_URL_MATCHER = "http://.*beastinvest.su.*";

    private TitleLoader loader;
    private TextView text;

    /**
     * {@inheritDoc}
     */
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getActionBar().hide();
        loader = new TitleLoader(this);
        text = (TextView) findViewById(R.id.text);
    }

    /**
     * Invoked on button pressed.
     * @param view
     *          Button
     */
    public void load(final View view) {
        loader.getTitle(LOAD_URL, LOAD_URL_MATCHER, this);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public boolean onCreateOptionsMenu(final Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    /**
     * On title recieved.
     */
    @Override
    public void onLoad(final String title) {
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                text.setText(title);
            }
        });
    }


}


TITLE LOADER


package com.admin.beastinvest;


import android.content.Context;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebSettings.PluginState;

/**
 *
 * Class to get title of web page through webview.
 *
 */
@SuppressWarnings("deprecation")
public class TitleLoader {

    private final WebView view;
    private String urlMatch;

    /**
     * Constructor.
     * @param context
     *          Context to create webView
     */
    public TitleLoader(final Context context) {
        view =  new WebView(context);
        view.setWebChromeClient(new WebChromeClient());
        view.getSettings().setPluginState(PluginState.ON);
        view.getSettings().setJavaScriptEnabled(true);
        view.addJavascriptInterface(this, "HTMLOUT");
        view.setWebViewClient(new WebViewClient() {

            @Override
            public void onPageFinished(final WebView view, final String url) {
                super.onPageFinished(view, url);
                if (url.matches(urlMatch)) {
                    view.loadUrl("javascript:window.HTMLOUT.onLoad(document.getElementsByTagName('title')[0].innerHTML);");
                }
            }

        });
    }

    /**
     * Method to invoke getting title.
     * @param url
     *          url to load
     * @param urlMatch
     *          filter for url (".*" - if no filter required)
     * @param listener
     *          title receive listener
     */
    public void getTitle(final String url, final String urlMatch, final LoadListener listener) {
        this.urlMatch = urlMatch;
        view.addJavascriptInterface(listener, "HTMLOUT");
        view.loadUrl(url);
    }
}


LOAD LISTENER
package com.admin.beastinvest;

/**
 * Created by Admin on 13.07.14.
 */
public interface LoadListener {

    /**
     * Invoked on title loaded.
     * @param title
     *          page's title
     */
    void onLoad(final String title);
}


На его устройстве приложение работает, а на моем нет. Возможно это из-за Android L.
Как можно спарсить данные с сайта?
  • Вопрос задан
  • 8126 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mihail9575
Да вроде примеров на официальном сайте достаточно. Еще есть JSoup. Мне он понравился больше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы