JavaRush /Java блогы /Random-KK /jsoup көмегімен оңай HTML талдауы
Stanislav
Деңгей
Москва

jsoup көмегімен оңай HTML талдауы

Топта жарияланған
Мүмкін бір күні сізге веб-сайттан немесе қолданбаңыздағы HTML құжатынан ақпарат алу қажет болуы мүмкін және мен jsoup кітапханасын пайдалану тапсырмаңызды айтарлықтай жеңілдететінін айтамын. Викиге сәйкес , jsoup HTML құжаттарында сақталған деректерді талдауға, шығаруға және өңдеуге арналған ашық бастапқы Java кітапханасы.

Жылдам бастау

Кітапхананы jar файлы ретінде жүктеп алуға және жобаға орналастыруға немесе Maven/Gradle арқылы қосуға болады. Мен мақаланың соңында ресми веб-сайтқа сілтеме қалдырамын: онда сіз кітапхананың ағымдағы нұсқасын таба аласыз. Мысалда біз Maven арқылы қосылымды қолданамыз. Тәуелділік қосайық:
<​dependency​>
  <​groupId>org.jsoup</groupId>
  <​artifactId>jsoup</artifactId>
  <​version>1.11.3</version>
</dependency>

Қолданылуы

DocumentЕң алдымен, талдау үшін көзді көрсететін org.jsoup.nodes.Document сайтынан сынып данасын алу керек . Бұл жергілікті файл немесе сілтеме болуы мүмкін. Мысалы, осы мақалада біз yandex.ru сайтын қолданамыз және олардың ағымдағы жаңалықтар арнасын алуға тырысамыз:
Document doc = Jsoup.connect("https://yandex.ru/")
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();
User Agentкіретін сайтқа хабарланатын идентификатор болып табылады. Көптеген сайттарда бұл антиспам сүзгісінің ең маңызды критерийі болып табылады. Referrerсұрау көзінің URL мекенжайын қамтиды. Әдіс get()өңделетін IOException шығарады, сондықтан біз бәрін блокқа орап аламыз try/catchнемесе оны одан әрі арқылы лақтыра аламыз throws. Біз қазір осы беттің бастапқы codeын алдық. Қажет болса, jsoup кітапханасының өзі зақымдалған элементтерді қалпына келтіре алады. Енді бізге іздеуді бөлек блокқа дейін тарылту ғана қалды. Әдіс select()қолданудың үлкен таңдауына ие: ол элементтерді тег, атрибуттар, класс және басқа параметрлер бойынша іздеуге мүмкіндік береді. Барлық дерлік заманауи браузерлер таңдалған элементтің бастапқы codeын жылдам іздеу мүмкіндігін қолдайды. Қарапайым манипуляциялар арқылы біз қажетті элементтің бастапқы codeын табамыз және divсынама алу үшін қолданатын көрсетілген классы бар блокты аламыз. Таңдалған блоктан барлық элементтерді таңдау үшін org.jsoup.select.Elements jsoup көмегімен оңай HTML талдауы - 1класын қолданайық .Elements
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Енді бізде келесідей нәрсе бар: jsoup көмегімен оңай HTML талдауы - 2Енді барлық элементтерді қайталау үшін шағын циклды пайдалану керек:
for (Element element : listNews.select("a"))
            System.out.println(element.text());
Әдіс text()түзету codeын алып тастауға мүмкіндік береді және барлық кіріс элементтер үшін мәтін комбинациясын ғана қалдырады. Орындау нәтижесі келесідей болады: jsoup көмегімен оңай HTML талдауы - 3Алынған жолдардың нақты саны беттегі нақты дисплейге сәйкес келмейтінін байқау оңай. Міне, бұл жерде тұзақтар жатыр. Белгілеудің бастапқы codeын қарасаңыз, соңғы жаңалықтар белгілі бір уақыт аралығында анимациялық түрде өзгеретінін байқайсыз. Бұл «тастардың» кейбіреулері қосымша сынамаларды алу арқылы шешіледі, және, әрине, сынақтар. Алғашқы бес элементте бізге қажетті ақпарат болады, ал алтыншы элементте тек сценарийлі бос жол болады. get(int index)Сондай-ақ, блоктарда идентификаторлар болмайды, содан кейін әдісті пайдаланып , қарастырылып жатқан элементтің позиция нөмірін тікелей көрсетуге болады .
System.out.println(listNews.select("a").get(2).text());

Қорытынды

Бұл мысал jsoup мүмкіндігінің аз ғана бөлігін көрсетеді. Сондай-ақ сайттар жиі жаңартылып, белгілеу codeының құрылымын өзгертеді, сондықтан скрепингпен жұмыс істегенде өзгерістерге бейімделуге дайын болуыңыз керек. Қосымша ақпаратты және ағымдағы нұсқасын jsoup.org ресми сайтынан ала аласыз , сабақтар мен әдістер туралы толығырақ o7planning.org сілтемесі арқылы оқи аласыз . Мен өзімнің github- қа сілтеме қалдырамын , жазу кезінде ақпаратты қабылдау және көрсету үшін Jsoup пайдаланатын бірнеше Telegram боттары бар.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION