- Библиотека jsoup — Суп с котом
- Вместо предисловия
- Общая информация
- Подключаем библиотеку
- Первый пример для знакомства
- Извлекаем заголовок страницы
- Извлекаем ссылки
- Разбор текста с сайта
- Разбор текста из файла
- Getting Started with JSOUP in Android
- Update
- Example
- Android Basic JSOUP Tutorial
- Latest comments
- Разбор HTML в Android с помощью Jsoup
- JSoup введение
Библиотека jsoup — Суп с котом
Вместо предисловия
Первоначально статья писалась, когда деревья были большими, коты были котятами, Android был версии 2.3, а библиотека jsoup была версии 1.6.1.
С тех пор утекло много воды. Хорошая новость — библиотека подросла до версии 1.13.1, стала чуть меньше размером, стала быстрее работать (почти в два раза). Плохая новость — мои примеры, связанные с интернетом, перестали работать в Android 4.0, так как теперь явно запретили использовать сетевые операции в основном потоке.
Я оставлю старую версию статьи здесь. Если вы пишете программы под старые устройства, то всё остаётся без изменений. Примеры под новые устройства находятся в закрытой зоне 4 курса.
Общая информация
Рассмотрим примеры работы с библиотекой jsoup. Java-библиотека jsoup предназначена для разбора HTML-страниц (парсинг), позволяя извлечь необходимые данные, используя DOM, CSS и методы в стиле jQuery.
Библиотека поддерживает спецификации HTML5 и позволяет парсить страницы, как это делают современные браузеры.
Библиотеке можно подсунуть для анализа URL, файл или строку.
Подключаем библиотеку
В Android Studio пропишите в файле build.gradle строку в блоке зависимостей.
Создаём новый проект JsoupDemo. Добавляем на форму кнопку и TextView.
После установки библиотеки вам нужно получить документ для разбора текста. Это может быть страница на сайте или локальный файл на устройстве. Таким образом вам надо подключиться к нужной странице и получить объект класса Document. При импортировании обращайте внимание на полное название класса org.jsoup.nodes.Document, так как многие пакеты имеют в своём составе одноимённый класс.
Получив документ в своё распоряжение, вы можете извлекать требуемую информацию. Например, вы можете получить все теги meta:
Метод select() позволяет получить нужные теги.
Если нужно получить атрибут тега, то используйте метод attr():
Можно выбрать теги с заданным классом. Например, на странице встречается тег типа
Первый пример для знакомства
Для первого знакомства разберём простой пример. А потом будем его усложнять. Создадим переменную, содержащий html-текст. Далее вызываем библиотеку jsoup и смотрим на результат.
Запустите проект и нажмите на кнопку. На экране отобразится наш текст. Но если вы присмотритесь внимательнее, то заметите некоторые отличия (скорее всего вы и не заметили). Я намеренно сделал две «ошибки». Во-первых, я не закрыл тег , а также не закрыл тег
у первого параграфа. Однако библиотека сама подставила недостающие элементы. Именно так поступают и браузеры, если веб-мастер по невнимательности забывает ставить закрывающие парные теги.
Что мы сделали? Мы передали нужный html-текст библиотеке Jsoup и попросили его осуществить его разбор (метод parse()). В результате мы получаем экземпляр класса Document, из которого с помощью метода html() извлекаем уже обработанный текст, с которым можно работать дальше.
Если у вас всё получилось, то можно перейти к более сложным примерам. Подробная документация по методам и свойствам есть на сайте библиотеки. Вам нужно только пробовать.
Извлекаем заголовок страницы
Заголовок страницы находится в теге . Чтобы получить текст заголовка, воспользуемся методом Document.title():
Извлекаем ссылки
Теперь попробуем поработать с ссылками. В нашем тексте есть ссылка, которую можно разбить на несколько логических элементов: адрес, на который ведёт ссылка, текст в ссылке и полная ссылка, которая объединяет оба элемента.
Начнём с адреса ссылки:
Чтобы получить текст ссылки:
И, наконец, общий вариант:
Разбор текста с сайта
Некоторые несознательные граждане могут меня обвинить в том, что я использовал синтетический пример, специально подготовленный для демонстрации. И хотят видеть пример с использованием ваших тырнетов. Ну что ж, вот вам пример.
Я подключаюсь к самой известной странице в мире http://developer.alexanderklimov.ru/android/ и получаю его заголовок.
Не забудьте установить разрешение на подключение к Интернету вашей программе. Я сам сначала долго тупил, не понимая, почему моя программа вылетала с ошибкой. Но, посмотрев в честные глаза своего кота, я понял в чем моя ошибка и исправил ее. Коты рулят.
Разбор текста из файла
Последний пример, который мы не разобрали — это разбор текста из файла. В этом случае используется метод Jsoup.parse(File in, String charsetName, String baseUri):
Попробуйте самостоятельно. Удачи в программировании! Да пребудет с вами кот!
Источник
Getting Started with JSOUP in Android
Nov 22, 2017 · 3 min read
Jsoup is a Java html parser. It is a Java library that is used to parse html documents. Jsoup gives programming interface to concentrate and control information from URL or HTML documents. It utilizes DOM, CSS and Jquery-like systems for concentrating and controlling records.
In this tutorial, you will get to know few steps to start with in parsing html document in an android application interface using Jsoup.
Update
Kindly note that this implementation might not be useful anymore. You can check out for articles that explain this with latest technologies. Thanks! 🙂
Example
This simple android application shows details of Firebase with Jsoup used to parse the logo and title from the web page.
Let’s get s t arted. Create a new android project with an Empty Activity.
Add Jsoup dependency to the app level of your build.gradle file since this is an external library.
Add Internet permission to the Android Manifest file for internet access.
Prepare a layout to display the data that will be fetched from the web page. For example, logo and title.
Go to your MainActivity.java class, in the OnCreate() method, initialize your views. Create an AsyncTask class that will be used to fetch the data in the background before displaying it on the main thread.
Let me explain some lines of codes and elements of Jsoup before calling them in the AsyncTask class.
In the above codes;
Document document = Jsoup.connect(url).get(): Document is a Jsoup node API element used in connecting to the website.
Element img = document.select(“img”).first() : allows the program check through the webpage to get the first since logo is usually placed at the very beginning of the code.
String imgSrc = img.absUrl(“src”): allows the program check through absolute attribute ‘src’ of and get the respective URL.
InputStream input = new java.net.URL().openStream(imgSrc): this downloads the logo from the url.
Bitmap bitmap = BitmapFactory.decodeStream(input): this code creates the logo bitmap.
String title = document.title(): this automatically gets the title of the website.
These lines of codes work at the background process in the doInBackground() method and the respective results are displayed in the onPostexecute() method. Then the AsyncTask class is called to execute in the onCreate() method.
Running the application gives;
This brings us to the end of the tutorial… So far, Jsoup provides a very convenient API for extracting and manipulating data.
Источник
Android Basic JSOUP Tutorial
Last Updated: October 24, 2013
In this tutorial, you will learn how to implement JSOUP open source java library in your Android application. JSOUP provides a very convenient API for extracting and manipulating data, using DOM, CSS, and jquery-like methods. JSOUP allows you to scrape and parse HTML from a URL, file, or string and many more. We will create 3 buttons on the main view and each button will perform different tasks such as showing the website title, description and a logo. So lets begin…
Before you proceed with this tutorial, download the latest JSOUP library from here.
Paste your downloaded Jsoup file into your project libs folder as shown on the image below.
Create a new project in Eclipse File > New > Android Application Project. Fill in the details and name your project JsoupTutorial.
Application Name : JsoupTutorial
Project Name : JsoupTutorial
Package Name : com.androidbegin.jsouptutorial
Open your MainActivity.java and paste the following code.
MainActivity.java
In this activity, we have created three buttons that response to three different AsyncTask. Before I proceed with further explanation, see the steps below on how to get the html source codes from a website.
Step 1 : Visit https://www.androidbegin.com with any preferred Internet browser on your PC
Step 2 : Right-Click on an open space and select “View page source”
Step 3 : Website source codes
A website source code determines how your webpages should appear. However, source code of a web page will only display information and code that is not processed by the server.
The first button retrieves the website title. This is a way to get the page title.
Java Code
Website Source Code
The second button retrieves the website description. By using Elements, we are able to specify the exact location of the data.
Java Code
Website Source Code
The third button retrieves the website logo. By using Elements, we are able to specify the exact location of the data.
Java Code
Website Source Code
Next, create an XML graphical layout for the MainActivity. Go to res > layout > Right Click on layout > New > Android XML File
Name your new XML file activity_main.xml and paste the following code.
activity_main.xml
Next, change the application name and texts. Open your strings.xml in your res > values folder and paste the following code.
strings.xml
In your AndroidManifest.xml, we need to declare permissions to allow the application to connect to the Internet. Open your AndroidManifest.xml and paste the following code.
AndroidManifest.xml
Output:
Source Code
[purchase_link text=”Purchase to Download Source Code” style=”button” color=”green”]
Latest comments
thank you so much!!
Android Basic JSOUP Tutorial
I can’t get bitmap to resolved I have put in import android.graphics.BitmapFactory; and import android.graphics.Bitmap; but bit map is still unresolved what am I doing wrong?
Christian Munch Hammervig
Android Basic JSOUP Tutorial
Because of my app navigation I use Fragments. Is it possible to use your tutorial in my situation?
Android Basic JSOUP Tutorial
hey there,i want to get news post from particular site which doesnt provide feeds over JSON/RSS.i have decided to use this method to scrape the contents,how can i scrape individual posts from the site an put it into list view?
Источник
Разбор HTML в Android с помощью Jsoup
В этом посте я хочу описать, как использовать JSoup в Android. JSoup — это библиотека Java, которая помогает нам извлекать HTML-файлы и манипулировать ими. Есть некоторые ситуации, когда мы хотим проанализировать и извлечь некоторую информацию из HTML-страницы, а не отображать ее. В этом случае мы можем использовать JSoup, который имеет набор мощных API, очень простых в использовании и интегрируемых в наши проекты Android. В этом посте мы обсудим, как настроить и Android-проект, который использует JSoup и как извлечь некоторую информацию.
JSoup введение
Как уже говорилось, JSoup — это библиотека Java, предоставляющая набор API для извлечения и управления файлами HTML. Существует несколько способов чтения и анализа HTML-страницы; в нашем случае мы хотим получить его с удаленного сервера, а затем мы должны предоставить URL. Если мы хотим проанализировать страницу как DOM, мы имеем:
где doc — это экземпляр класса Document, который содержит полученный документ. Теперь у нас есть наш документ, и мы можем свободно извлекать информацию. Мы можем получить заголовок или другую информацию, используя теги HTML.
Например, если мы хотим получить весь тег с именем meta , мы имеем:
где select это метод, который нужно использовать, когда мы хотим получить теги с помощью CSS-запроса. Например, если мы хотим получить значение атрибута из имеющегося у нас тега:
где name это имя атрибута. Кроме того, мы можем выбрать все элементы на странице HTML, которые имеют определенное значение класса CSS. Например, на этом сайте есть некоторые элементы, которые имеют класс CSS, равный теме , поэтому мы имеем:
где мы выбираем только тег h2, имеющий класс с именем topic.
Если вы хотите получить больше информации, перейдите по этой ссылке .
Источник