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

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

Войти
Регистрация
Восстановить пароль
 
Богдан Коломиец
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 7
#1

Jsoup: парсинг странички и заполнение контентом Activity - Программирование Android

15.12.2015, 16:30. Просмотров 413. Ответов 3

Здравствуйте. В общем столкнулся с такой проблемой. Нужно отпарсить страничку через JSOUP. на страничке может быть простой текст, картинки, заголовки и т.д. нужно вывести это все добро на Activity. Но вот с реализацией проблеммы. Не могу додуматься как это сделать... сначала я написал этот код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
                 articleContent = HTMLPage.select("article.b-typo p");
                if (articleContent != null)
                    for (Element element : articleContent) {
                        contentElements.add(new NewsArticlePageElements("CONTENT", element.text().replace(" ", " ")));
                    }
                eArticleContentImage = HTMLPage.select("article.b-typo p img");
                if (eArticleContentImage != null)
                    for (Element element : eArticleContentImage) {
                        String articleContentImageURL = element.attr("src");
                        contentElements.add(new NewsArticlePageElements("IMAGE", articleContentImageURL));
                    }
                articleHeading = HTMLPage.select("article.b-typo h2");
                if (articleHeading != null)
                    for (Element element : articleHeading) {
                        contentElements.add(new NewsArticlePageElements("CONTENT_HEADING", element.text().replace(" ", " ")));
                    }
                articleCode = HTMLPage.select("article.b-typo pre");
                if (articleCode != null)
                    for (Element element : articleCode) {
                        contentElements.add(new NewsArticlePageElements("CONTENT_CODE", element.text()));
                    }
но это неправильно так как в этом случае я сначала добавлю текст, затем картинки и так далее.. Затем я переписал метод и вышло не лучше.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
articleContent = HTMLPage.select("article.b-typo");
                for (Element element : articleContent) {
                    Element articleContentText = element.select("p").first();
                    Element eArticleContentImage = element.select("p img").first();
                    Element articleHeading = element.select("h2").first();
                    Element articleCode = element.select("pre").first();
 
                    if (articleContentText != null) {
                        contentElements.add(new NewsArticlePageElements("CONTENT", element.text().replace(" ", " ")));
                    } else if (eArticleContentImage != null) {
                        String articleContentImageURL = eArticleContentImage.attr("src");
                        contentElements.add(new NewsArticlePageElements("IMAGE", articleContentImageURL));
                    } else if (articleHeading != null) {
                        contentElements.add(new NewsArticlePageElements("CONTENT_HEADING", element.text().replace(" ", " ")));
                    } else if (articleCode != null) {
                        contentElements.add(new NewsArticlePageElements("CONTENT_CODE", element.text()));
                    }
                }
Но в этом уже случае я просто выбираю первый элемент с тэгом <p>. А это тоже неправильно.

А идея что бы добавлять элементы по мере прохождения странички в список, и затем их вытягивать оттуда в такой же последовательности.. Вот пример:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
LayoutInflater inflater = getLayoutInflater();
for (NewsArticlePageElements element : contentElements) {
                if (element.getElementType() == "CONTENT") {
                    textArticleContent = (TextView) inflater.inflate(R.layout.text_article_content, null);
                    textArticleContent.setText(element.getElementContent());
                    layoutContentContainer.addView(textArticleContent);
                } else if (element.getElementType() == "IMAGE") {
                    imageContentArticle = (ImageView) inflater.inflate(R.layout.image_article_content, null);
                    Picasso.with(getApplicationContext())
                            .load(element.getElementContent())
                            .into(imageContentArticle);
                    layoutContentContainer.addView(imageContentArticle);
                } else if (element.getElementType() == "CONTENT_HEADING") {
                    textArticleContent = (TextView) inflater.inflate(R.layout.text_heading_article_content, null);
                    textArticleContent.setText(element.getElementContent());
                    layoutContentContainer.addView(textArticleContent);
                }
 
            }
Подбросьте пожалуйста идей, как можно реализовать вытягивание элементов со странички и добавление их в список в порядке прохождения странички.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2015, 16:30     Jsoup: парсинг странички и заполнение контентом Activity
Посмотрите здесь:
Android Парсинг с Jsoup и заполнение в таблицу
Android Fragment, Splash-activity, Jsoup onPostExecute
JSOUP парсинг Android
Парсинг на jsoup Android
Jsoup парсинг сайта Android
jsoup, парсинг html Android
Android Парсинг XML с помощью Jsoup
Android Ошибка приложения (парсинг jsoup)
Android Jsoup парсинг адерса ссылки
Android Парсинг на JSOUP APACHE, не работает read и getInputStream
Непонятная ошибка в Android Studio, парсинг, jsoup Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViktorBel
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 1
21.04.2016, 10:48     Jsoup: парсинг странички и заполнение контентом Activity #2
Очень интересная тема. Для моей программы требуется сейчас то же самое. Может кто нибудь знает?
disx
20 / 20 / 0
Регистрация: 26.02.2014
Сообщений: 517
Записей в блоге: 1
21.04.2016, 13:27     Jsoup: парсинг странички и заполнение контентом Activity #3
Присоединяюсь к вопросу?
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
21.04.2016, 22:12     Jsoup: парсинг странички и заполнение контентом Activity #4
Эмм, а в чем проблема?

У Jsoup'a есть такая чудесная вещь как Elements которая отдает весь контент с сайта в виде массива, вам достаточно только найти нужные элементы и получать их оттуда. Вот пример с сайта adme.ru

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
 
public ArrayList<ItemModel> itemsArrayList = new ArrayList<ItemModel>();
 
public class DataFetcher extends AsyncTask<Void, Void, ArrayList<ItemModel>>{
        @Override
        protected ArrayList<ItemModel> doInBackground(Void... params) {
            Document doc;
            try{
                doc = Jsoup.connect("http://www.adme.ru/").get();
                Elements fetchedItem = doc.getElementsByAttributeValueMatching("class", "article-list-block js-article-list-item");
                itemsArrayList.clear();
                for (Element fetchedItems: fetchedItem){
 
                    ItemModel mItemModel = new ItemModel();
                    //Parsing pictures
                    Elements pictures = fetchedItems.select(".al-pic");
                    String srcValue = pictures.attr("src");
                    //Parsing item urls
                    Elements urls = fetchedItems.select("a");
                    String urlValue = urls.attr("abs:href");
                    //Passing parsed items to model
                    mItemModel.setTitle(fetchedItems.select(".al-title").text());
                    mItemModel.setDescription(fetchedItems.select(".al-descr").text());
                    mItemModel.setUrl(urlValue);
                    mItemModel.setImage(srcValue);
                    mItemModel.setItemId(itemId);
 
                    //Adding model to array list
                    itemsArrayList.add(mItemModel);
                    itemId++;
                }
 
                //adding data to adapter
                //itemAdapter = new ItemAdapter(HomeActivity.this, itemsArrayList);
            } catch (IOException e){
                e.printStackTrace();
            }
            return itemsArrayList;
        }
 
        @Override
        protected void onPostExecute(ArrayList<ItemModel> result) {
            //show data in listview
            //homeListView.setAdapter(itemAdapter);
        }
    }
ItemModel
Кликните здесь для просмотра всего текста
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
public class ItemModel{
    String title;
    String description;
    String image;
    String url;
    int itemId;
 
    public int getItemId() {
        return itemId;
    }
 
    public void setItemId(int itemId) {
        this.itemId = itemId;
    }
 
 
    public String getUrl() {
        return url;
    }
 
    public void setUrl(String url) {
        this.url = url;
    }
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
 
    public String getDescription() {
        return description;
    }
 
    public void setDescription(String description) {
        this.description = description;
    }
 
    public String getImage() {
        return image;
    }
 
    public void setImage(String image) {
        this.image = image;
    }
 
    public HashMap<String, String> toHashMap(){
        HashMap<String, String> stringItemMap = new HashMap<String, String>();
        stringItemMap.put("itemTitle", getTitle());
        stringItemMap.put("itemDescr", getDescription());
        stringItemMap.put("itemImage", getImage());
        stringItemMap.put("itemUrl", getUrl());
        stringItemMap.put("itemId", String.valueOf(getItemId()));
 
        return stringItemMap;
 
 
    }
 
}
Yandex
Объявления
21.04.2016, 22:12     Jsoup: парсинг странички и заполнение контентом Activity
Ответ Создать тему
Опции темы

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