Как спарсить данные сайта в 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.
Как можно спарсить данные с сайта?
  • Вопрос задан
  • 8049 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mihail9575
Да вроде примеров на официальном сайте достаточно. Еще есть JSoup. Мне он понравился больше.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы