Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
#1

Парсинг Википедии - Программирование Android

27.03.2014, 21:13. Просмотров 1380. Ответов 13
Метки нет (Все метки)

Здравствуйте. Выручайте! нужно сделать парсинг, т.е. я ввожу слово и его значение мне выдается в листвиев (Википедия).
Вот мои наработки:
MainActivity:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.example.avto_golos;
 
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import org.htmlcleaner.TagNode;
 
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.text.Editable;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.view.View;
 
public class MainActivity extends Activity {
    
    EditText ed1;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         //Находим кнопку
        Button button = (Button)findViewById(R.id.parse);
        EditText ed1 = (EditText) findViewById(R.id.editText1);
      }
    
      //Диалог ожидания
      private ProgressDialog pd;
      //Слушатель OnClickListener для нашей кнопки
        public void onClick(View v) 
        {
          //Показываем диалог ожидания
          pd = ProgressDialog.show(MainActivity.this, "Working...", "request to server", true, false);
          //Запускаем парсинг
          new ParseSite().execute("http://ru.wikipedia.org/wiki/%D0%90");       
        }
      
      private class ParseSite extends AsyncTask<String, Void, List<String>> {
            //Фоновая операция
            protected List<String> doInBackground(String... arg) {
              List<String> output = new ArrayList<String>();
              try
              {
                HtmlHelper hh = new HtmlHelper(new URL(arg[0]));
                List<TagNode> links = hh.getLinksByClass("");
 
                for (Iterator<TagNode> iterator = links.iterator(); iterator.hasNext();)
                {
                  TagNode divElement = (TagNode) iterator.next();
                  output.add(divElement.getText().toString());
                }
              }
              catch(Exception e)
              {
                e.printStackTrace();
              }
              return output;
            }
 
            //Событие по окончанию парсинга
            protected void onPostExecute(List<String> output) {
              //Убираем диалог загрузки
              pd.dismiss();
              //Находим ListView
              ListView listview = (ListView) findViewById(R.id.listViewData);
              //Загружаем в него результат работы doInBackground
              listview.setAdapter(new ArrayAdapter<String>(MainActivity.this,
                  android.R.layout.simple_list_item_1 , output));
            }
          }
      
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
}
HtmlHelper
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.example.avto_golos;
 
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
 
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;
 
public class HtmlHelper {
          TagNode rootNode;
 
          //Конструктор
          public HtmlHelper(URL htmlPage) throws IOException
          {
            //Создаём объект HtmlCleaner
            HtmlCleaner cleaner = new HtmlCleaner();
            //Загружаем html код сайта
            rootNode = cleaner.clean(htmlPage);
          }
 
          List<TagNode> getLinksByClass(String CSSClassname)
          {
            List<TagNode> linkList = new ArrayList<TagNode>();
 
            //Выбираем все ссылки
            TagNode linkElements[] = rootNode.getElementsByName("p", true);
            //for (int i = 0; linkElements != null && i < linkElements.length; i++)
            //{
                linkList.add(linkElements[0]);
            //}
 
            return linkList;
          }
}
Получается если ссылку так указываю new ParseSite().execute("http://ru.wikipedia.org/wiki/%D0%90"); все норма, но мне нужно любое слово. В адресной строке ссылка на запрос выглядит так: http://ru.wikipedia.org/wiki/А
но если я так пишу приложение остановлено. Выручайте Уважаемые программисты. Буду благодарен.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 21:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Парсинг Википедии (Программирование Android):

При вводе слов из Википедии брать значение этого слова и отображать в TextView - Программирование Android
Всем привет создаю программу , и хочу чтобы при вводе слов из википедии бралось значение этого слова и отображалось в TextView

Парсинг XML - Программирование Android
Пробую так String data = getIntent().getStringExtra(&quot;data&quot;); try { DocumentBuilderFactory factory =...

Парсинг сайта - Программирование Android
Привет всем, тут вылезла какая то не понятная фигня... Буквально вчера все работало нормально, а сегодня перестало парсить. Суть. Я...

Парсинг JSON'а - Программирование Android
Здравствуйте! Недавно я на php+msql и Eclipse пробовал этот пример с сайта...

Парсинг строки - Программирование Android
Добрый день. Столкнулся с проблемой. В общем есть некая строка примерно такого содержания &quot;{xxxx=Май 2013}&quot; надо вытянуть из нее месяц...

Парсинг сайта - Программирование Android
Здравствуйте уважаемые форумчане. Хочу спарсить расписание занятий определенной группы например Расписание группы ктбо И мне еще...

13
Freemanasus
2 / 2 / 1
Регистрация: 25.01.2014
Сообщений: 51
27.03.2014, 22:14 #2
Button и EditText за что вообще отвечают?
1
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
27.03.2014, 22:16  [ТС] #3
В EditText вводится запрос, а Button удалить просто забыл...
Я кстати разобрался уже, кому интересно вот часть кода которую изменил шуть-шуть:
Java
1
2
3
4
5
6
7
8
9
10
        public void onClick(View v) throws UnsupportedEncodingException 
        {
          //Показываем диалог ожидания
          pd = ProgressDialog.show(MainActivity.this, "Working...", "request to server", true, false);
          //Запускаем парсинг
          final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
          String path="http://www.ru.wikipedia.org/wiki/"+ed1.getText().toString();
          String request = Uri.encode(path, ALLOWED_URI_CHARS);
          new ParseSite().execute(request);
        }
1
Freemanasus
2 / 2 / 1
Регистрация: 25.01.2014
Сообщений: 51
27.03.2014, 22:44 #4
Maksim2309, И каким образом это работает? Вводим запрос что дальше?
0
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
27.03.2014, 22:46  [ТС] #5
Вводим запрос и в ListView получаем первый абзац с википедии (ту биш основную инфу). Это так для развития собственного делаю. Дальше больше будет)
1
Freemanasus
2 / 2 / 1
Регистрация: 25.01.2014
Сообщений: 51
27.03.2014, 22:47 #6
Maksim2309, Я ввожу запрос и ничего...
0
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
27.03.2014, 22:51  [ТС] #7
странно... вот скрин, ничего не придумал)))
1
Миниатюры
Парсинг Википедии  
Freemanasus
2 / 2 / 1
Регистрация: 25.01.2014
Сообщений: 51
27.03.2014, 22:55 #8
Maksim2309, ты же сказал что удалил кнопку) Брось весь проект, а что мне интересно стало)
0
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
27.03.2014, 22:59  [ТС] #9
Цитата Сообщение от Freemanasus Посмотреть сообщение
ты же сказал что удалил кнопку)
Пришлось вернуть) Лень было VK_ENTER и все такое писать)
Цитата Сообщение от Freemanasus Посмотреть сообщение
Брось весь проект, а что мне интересно стало)
Да я бы с удовольствием, но на дипломку чем-нибудь удивить надо. Вот как раз и думаю, что еще привентить можно?)
1
Freemanasus
2 / 2 / 1
Регистрация: 25.01.2014
Сообщений: 51
27.03.2014, 23:01 #10
Maksim2309, Не знаю) Я смысле кинуть можешь мне архивом проект? Я просто только учусь хочу посмотреть твой код и разобраться)
0
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
27.03.2014, 23:04  [ТС] #11
Без проблем, лови) Кстати чтобы работало нужна библиотечка (совсем забыл), ее я тоже положил) А как подключать можешь на любом форуме найти.
1
Вложения
Тип файла: rar Avto_golos.rar (1.81 Мб, 29 просмотров)
Тип файла: zip htmlcleaner-2.8.zip (127.6 Кб, 24 просмотров)
Freemanasus
2 / 2 / 1
Регистрация: 25.01.2014
Сообщений: 51
27.03.2014, 23:06 #12
Maksim2309, большое спасибо) на счет библеотеки я уже понял и установил) еще раз спасибо)
0
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
27.03.2014, 23:08  [ТС] #13
не за что)
1
Maksim2309
45 / 45 / 2
Регистрация: 17.01.2013
Сообщений: 328
29.03.2014, 17:30  [ТС] #14
Здравствуйте! Снова проблема с парсом (не стал создавать новую тему, так как проблема в принципе подобная + зачем хламить форум). Подскажите пожалуйста почему htmlcleaner ни в какую не хочет парсить мне погоду?
Вот я задаю ссылку:
Java
1
2
3
4
5
6
final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
         ...
              zap = zap.replace(" ", "-");
              path="http://sinoptik.ua/"+zap.toString();
          String request = Uri.encode(path, ALLOWED_URI_CHARS);
          new ParseSite().execute(request);
Вот задаю класс:
Java
1
links = hh.getLinksByClass("today-temp");
Сам класс выше, но я сделал незначительные изменения, вот и они:
Java
1
2
3
4
5
6
7
8
9
10
for (int i = 0; linkElements != null && i < linkElements.length; i++)
            {
                String classType = linkElements[i].getAttributeByName("class");             
                    if (classType != null && classType.equals(CSSClassname))
                      {
                        linkList.add(linkElements[i]);
                        Log.d("Температура", "Я нашел температуру");
                      }
 
            return linkList;
Не находит гад такой ни одного элемента, хотя на странице он есть... Заранее спасибо за любую помощь!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2014, 17:30
Привет! Вот еще темы с ответами:

Парсинг html - Программирование Android
как парсить html таблицу?

Парсинг XML - Программирование Android
Решил освоить Android написал первое приложение(программка расшифровывает статус контролера банкомата из БД ошибок в формате SQLite и...

Парсинг+вывод - Программирование Android
Есть страница &quot;http ://meteo - liman. bl .ee/index2&quot;, необходимо её спарсить и данные вывести на экран. Парсинг: Document doc =...

Парсинг XML - Программирование Android
try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
29.03.2014, 17:30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru