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

Парсинг на jsoup - Android

Восстановить пароль Регистрация
 
tortmann1
0 / 0 / 0
Регистрация: 26.07.2015
Сообщений: 1
26.07.2015, 13:37     Парсинг на jsoup #1
Добрый всем день!
Заминка такая, уже весь гугл перелопатил, синих ссылок в браузере не осталось.
Есть пример парсинга сайта:
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
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.list_item, R.id.product_name, titleList);
        }
 
        /** А вот и внутрений класс который делает запросы, если вы не читали статьи у меня в блоге про отдельные
         * потоки советую почитать */
        public class NewThread extends AsyncTask<String, Void, String> {
 
                // Метод выполняющий запрос в фоне, в версиях выше 4 андроида, запросы в главном потоке выполнять
                // нельзя, поэтому все что вам нужно выполнять - выносите в отдельный тред
                @Override
                protected String doInBackground(String... arg) {
 
                        // класс который захватывает страницу
                        Document doc;
                        try {
                                // определяем откуда будем воровать данные
                                doc = Jsoup.connect("http://freehabr.ru/").get();
                                // задаем с какого места, я выбрал заголовке статей
                                title = doc.select(".title");
                                // чистим наш аррей лист для того что бы заполнить
                                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);
                }
        }
}
Но вот беда, код рабочий, но почему в listview заполняется только первая строка?
Мне надо с сайта http://www.red--sky.ru/ спарсить новости.
Выглядит так:
Java
1
2
3
4
5
6
7
8
9
 doc = Jsoup.connect("http://www.red--sky.ru/").get();
                                // задаем с какого места, я выбрал заголовке статей
                                title = doc.select("#main_wrapper > div.container.boxed.blog.normal-page.container-wrap > div > div.col-lg-8 > div:nth-child(1) > div.blog-twrapper > div.blog-content");
                                // чистим наш аррей лист для того что бы заполнить
                                titleList.clear();
                                // и в цикле захватываем все данные какие есть на странице
                                for (Element titles : title) {
                                        // записываем в аррей лист
                                        titleList.add(titles.text());
В результате листвью заполняется одной строкой с первой новостью, почему остальное не парсится?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2015, 13:37     Парсинг на jsoup
Посмотрите здесь:

Android Parsing with Jsoup
Android Ошибка приложения (парсинг jsoup)
jsoup Android
jsoup, парсинг html Android
Android Jsoup парсинг адерса ссылки
Android Парсинг XML с помощью Jsoup
Jsoup: парсинг странички и заполнение контентом Activity Android
Непонятная ошибка в Android Studio, парсинг, jsoup Android
Jsoup парсинг сайта Android
Android Jsoup
Android Парсинг с Jsoup и заполнение в таблицу

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,064
27.07.2015, 08:14     Парсинг на jsoup #2
А если так?
Java
1
2
titles.get(1).text();
titles.get(2).text();
Поясните, что тут происходит?
"#main_wrapper > div.container.boxed.blog.normal-page.container-wrap > div > div.col-lg-8 > div:nth-child(1) > div.blog-twrapper > div.blog-content"
Можно еще так:
Java
1
2
3
4
5
6
Elements div = doc.select("div.blog-post");
if (div.size() > 0) {
    for (int i = 0; i < div.size(); i++) {
        Log.d("", div.get(i).select("blog-content").text());
    }
}
Yandex
Объявления
27.07.2015, 08:14     Парсинг на jsoup
Ответ Создать тему
Опции темы

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