Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Богдан Коломиец
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 7
#1

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

15.12.2015, 16:30. Просмотров 659. Ответов 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);
                }
 
            }
Подбросьте пожалуйста идей, как можно реализовать вытягивание элементов со странички и добавление их в список в порядке прохождения странички.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2015, 16:30
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Jsoup: парсинг странички и заполнение контентом Activity (Программирование Android):

Парсинг с Jsoup и заполнение в таблицу
Доброго времени суток. Мозг выгорает, не могу разобраться как правильно парсить...

Fragment, Splash-activity, Jsoup onPostExecute
Есть 2 фрагмента, собственно первый это сплеш-активити, перед запуском самого...

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

JSOUP парсинг
Код парсит в textView1 с сайта class=&quot;30&quot; Как переписать/дописать код, чтоб он...

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

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

3
ViktorBel
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 1
21.04.2016, 10:48 #2
Очень интересная тема. Для моей программы требуется сейчас то же самое. Может кто нибудь знает?
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
21.04.2016, 13:27 #3
Присоединяюсь к вопросу?
0
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
21.04.2016, 22:12 #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;
 
 
    }
 
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2016, 22:12
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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