Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
ivanofme
0 / 0 / 1
Регистрация: 17.09.2016
Сообщений: 86
1

JSOUP парсинг

17.02.2017, 01:29. Просмотров 1610. Ответов 6
Метки нет (Все метки)

Код парсит в textView1 с сайта class="30"
Как переписать/дописать код, чтоб он парсил еще и в textView2 класс="31"

Классы 30, 31 на сайте есть. И не дублируются.

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
package com.example.webparser;
 
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
 
import java.io.IOException;
import java.util.ArrayList;
 
public class MainActivity extends Activity {
    // благодоря этому классу мы будет разбирать данные на куски
    public Elements title;
    // то в чем будем хранить данные пока не передадим адаптеру
    public ArrayList<String> titleList = new ArrayList<String>();
    // Listview Adapter для вывода данных
    private ArrayAdapter<String> adapter;
    // List view
    private ListView lv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // определение данных
        lv = (ListView) findViewById(R.id.listView1);
        // запрос к нашему отдельному поток на выборку данных
        new NewThread().execute();
        // Добавляем данные для ListView
        adapter = new ArrayAdapter<String>(this, R.layout.activity_main, R.id.textView1, titleList);
    }
    /** А вот и внутрений класс который делает запросы, если вы не читали статьи у меня в блоге про отдельные
     * потоки советую почитать */
    public class NewThread extends AsyncTask<String, Void, String> {
        // Метод выполняющий запрос в фоне, в версиях выше 4 андроида, запросы в главном потоке выполнять
        // нельзя, поэтому все что вам нужно выполнять - выносите в отдельный тред
        @Override
        protected String doInBackground(String... arg) {
            // класс который захватывает страницу
            Document doc;
            try {
                // определяем откуда будем воровать данные
                doc = Jsoup.connect("https://vk.cc/6fs8pD").get();
                // задаем с какого места, я выбрал заголовке статей
                title = doc.select(".30");
                // чистим наш аррей лист для того что бы заполнить
                titleList.clear();
                // и в цикле захватываем все данные какие есть на странице
                for (Element titles : title) {
                    // записываем в аррей лист
                    titleList.add(titles.text());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            // ничего не возвращаем потому что я так захотел)
            return null;
        }
        @Override
        protected void onPostExecute(String result) {
            // после запроса обновляем листвью
            lv.setAdapter(adapter);
        }
    }
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2017, 01:29
Ответы с готовыми решениями:

Парсинг JSOUP
Всем доброго времени суток, собственно такой вопрос. Хочу спарсить сайт с помощью библиотеки...

Парсинг на jsoup
Добрый всем день! Заминка такая, уже весь гугл перелопатил, синих ссылок в браузере не осталось....

Парсинг Jsoup
Парсю сайт с помощью Jsoup Есть страница с новостями с URL в виде: Новости за последний месяц...

jsoup, парсинг html
А почему не работает такой простой код? Парсинг из инета пока не трогаем... Код: package...

Jsoup парсинг сайта
Помогите пожалуйста. Пытаюсь получить названия книг с сайта livelib. Но он ничего не парсит. Все...

6
Mikalai
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
17.02.2017, 02:29 2
Код парсит тэг "<td class="31"...". Адаптируй под себя.
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
public class MainActivity extends AppCompatActivity {
 
    String TAG = "SuperTag";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        new Thread(r).start();
    }
 
    Runnable r = new Runnable() {
        @Override
        public void run() {
            try {
                Document doc = Jsoup.connect("https://vk.cc/6fs8pD").get();
                Element e = doc.select("td[class='31']").get(0);
                String text = e.text();
                Log.d(TAG, "text: " + text);
            } catch (Exception e) {
                Log.d(TAG, "Exception: " + e.toString());
            }
        }
    };
}
1
ivanofme
0 / 0 / 1
Регистрация: 17.09.2016
Сообщений: 86
17.02.2017, 13:12  [ТС] 3
Mikalai, код не работает.
0
Pablito
2863 / 2275 / 768
Регистрация: 12.05.2014
Сообщений: 7,978
Завершенные тесты: 1
17.02.2017, 13:45 4
вот такой код выведет в консоль всю 4-ю колонку из первой таблицы
Java
1
2
3
4
5
                doc = Jsoup.connect("https://vk.cc/6fs8pD").get();
                final Elements col = doc.select("table:eq(0) tr:gt(2) td:eq(5)");
                for (Element e : col) {
                    Log.i("azaza", "doInBackground: " + e.text());
                }
Bash
1
2
3
4
5
6
7
I/azaza: doInBackground: по расписанию
I/azaza: doInBackground: по расписанию
I/azaza: doInBackground: по расписанию
I/azaza: doInBackground: Физическая культура (пр.),
I/azaza: doInBackground: *
I/azaza: doInBackground: *
I/azaza: doInBackground:
запрос в селекте читается так (нумерация идет с нуля, ваш кэп)
выбрать элементы с тегом table, взять нулевой из этого списка и из него выбрать элементы с тегом tr и взять все, начиная со 2-го и дальше (мы типа пропускаем первые три строки в таблице, там шапка)
потом выбрать элементы с тегом td и брать из списка только 5-е по счету (эту нужная нам колонка)
PROFIT
0
ivanofme
0 / 0 / 1
Регистрация: 17.09.2016
Сообщений: 86
17.02.2017, 14:42  [ТС] 5
Паблито, мне нужно каждый класс вывести в определенный textView

JSOUP парсинг
0
ivanofme
0 / 0 / 1
Регистрация: 17.09.2016
Сообщений: 86
17.02.2017, 17:05  [ТС] 6
UPD: классы на сайте поменял.
0
Pablito
2863 / 2275 / 768
Регистрация: 12.05.2014
Сообщений: 7,978
Завершенные тесты: 1
17.02.2017, 17:18 7
ты думаешь если будешь просто писать сюда свои какие-то рандомные мысли в утвердительной форме, то все кинутся помогать?
0
17.02.2017, 17:18
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2017, 17:18

Jsoup парсинг адерса ссылки
Как с помощью библиотеки jsoup парсить адрес ссылки &lt;a class=&quot;news-one clearfix brdr-btm&quot;...

Парсинг XML с помощью Jsoup
Всем добрый день. Пишу андроид приложение. Использую библиотеку jsoup. Возникла проблема с...

Ошибка приложения (парсинг jsoup)
Вот есть такой код (делал по этому примеру ) package com.example.parse; import...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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