JavaRush /Java блогу /Random-KY /Jsoup аркылуу Java'да HTML файлын талдоо боюнча 3 мисал
Sdu
Деңгээл

Jsoup аркылуу Java'да HTML файлын талдоо боюнча 3 мисал

Группада жарыяланган
Jsoup аркылуу Java'да HTML файлын талдоонун 3 мисалы - 1HTML бул WEBдин өзөгү, сиз көрүп турган бардык интернет баракчалары, алар динамикалык түрдө JavaScript, JSP, PHP, ASP же башка веб-технологиялар аркылуу түзүлсө да, HTMLге негизделген. Чынында, браузериңиз HTMLди талдап, аны сизге ыңгайлуу кылып көрсөтөт. Бирок HTML documentин талдап, андан кандайдыр бир элементти, тегди, атрибутту таап же Java программасын колдонуу менен белгилүү бир элемент бар же жок экенин текшерүү керек болсо эмне болот. Эгер сиз бир нече жыл Java программисти болсоңуз, DOM же SAX сыяктуу талдоочуларды колдонуп XML талдоо жасамаксыз деп ишенем. Бирок, таң калыштуусу, сиз HTML documentти Сервлеттерди жана башка Java веб-технологияларын камтыбаган негизги Java тиркемесинде талдооңуз керек болгон учурлар бар. Мындан тышкары, Core JDK да HTTP же HTML китепканаларын камтыbyte. Ошондуктан, HTML файлын талдоо жөнүндө сөз болгондо, көптөгөн Java программисттери Google'дан Java'дагы HTML тегинин баасын кантип алуу керектигин сурашат. Мен муну көргөндө, чечим мага керектүү функцияны ишке ашырган ачык булактуу китепкана болоруна ишенгем, бирок анын Jsoup сыяктуу сонун жана өзгөчөлүктөргө бай болорун билген эмесмин. Ал JQuery стorндеги HTML файлдарын, атрибуттарды, CSS класстарын окуу жана талдоо үчүн гана колдоо көрсөтпөстөн, ошол эле учурда аларды өзгөртүүгө мүмкүнчүлүк берет. Jsoup колдонуу менен сиз HTML documentи менен каалаган нерсени кыла аласыз. Бул макалада биз HTML файлын талдап, тегдердин атын жана атрибуттарын табабыз. Биз ошондой эле файлдан жана каалаган URL дарегинен, мисалы, Google башкы бетинен HTML жүктөө жана талдоо мисалдарын карап чыгабыз.

Jsoup деген эмне

Jsoup чыныгы HTML менен иштөө үчүн ачык булактуу Java китепканасы. Ал мыкты DOM, CSS жана jQuery сыяктуу ыкмаларды колдонуу менен маалыматтарды алуу жана манипуляциялоо үчүн абдан ыңгайлуу API менен камсыз кылат. Jsoup WHATWG HTML5 спецификациясын ишке ашырат жана HTMLди Chrome жана Firefox сыяктуу заманбап браузерлердей эле DOMга талдайт. Бул жерде Jsoup китепканасынын кээ бир пайдалуу өзгөчөлүктөрү бар:
  • Jsoup URL'ден, файлдан же саптан HTMLди кырып, талдай алат.
  • Jsoup DOM өтүү же CSS селекторлорунун жардамы менен маалыматтарды таап, чыгара алат.
  • Jsoup HTML элементтерин, атрибуттарын жана текстин башкарууга мүмкүндүк берет.
  • Jsoup XSS чабуулдарын алдын алуу үчүн колдонуучу берген маалыматты ак тизмеден тазалоону камсыз кылат.
  • Jsoup ошондой эле "тыкан" HTML чыгарат.
Jsoup чыныгы дүйнөдө бар HTMLдин ар кандай түрлөрү менен иштөө үчүн иштелип чыккан, анын ичинде толук эмес, текшерилбеген тегдер топтому менен туура тастыкталган HTML. Jsoup негизги артыкчылыктарынын бири анын ишенимдүүлүгү болуп саналат.

Jsoup аркылуу Java ичинде HTML талдоо

Бул окуу куралында биз Jsoup аркылуу Java тorнде HTML documentин талдоо жана өтүүнүн үч түрдүү мисалын көрөбүз. Биринчи мисалда биз Java сап литералы түрүндөгү тегдерди камтыган HTML сапты талдайбыз. Экинчи мисалда биз HTML documentибизди Интернеттен жүктөп алабыз, үчүнчү мисалда талдоо үчүн өзүбүздүн үлгүдөгү HTML файлыбызды login.html жүктөп алабыз. Бул файл HTML формасын камтыган "дене" бөлүмүндөгү "аталышы" теги жана "div" тегинен турган үлгү HTML documentи. Форма логин жана паролду киргизүү үчүн талааларды, ошондой эле андан аркы аракеттер үчүн баштапкы абалга келтирүү жана ырастоо баскычтарын камтыйт. Бул "туура" HTML, ал "жарактуулук" текшерүүсүнөн өтө алат, башкача айтканда, бардык тэгдер жана атрибуттар туура жабылган. Биздин HTML файлыбыз ушундай көрүнөт:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Login Page</title>
    </head>
    <body>
        <div id="login" class="simple" >
            <form action="login.do">
                Username : <input id="username" type="text" /><br>
                Password : <input id="password" type="password" /><br>
                <input id="submit" type="submit" />
                <input id="reset" type="reset" />
            </form>
        </div>
    </body>
</html>
Jsoup.parse()Jsoup менен HTMLди талдоо абдан оңой, сизге статикалык ыкманы чакырып , ага HTML сапыңызды өткөрүп берүү жетиштүү . Jsoup parse()HTMLди саптан, файлдан, URI базасынан, URL'ден жана InputStream. HTML файлы UTF-8 форматында болбосо, аны туура окуу үчүн codeдоону да белгилей аласыз. Метод parse(String html)келген HTMLди жаңы an objectке талдайт Document. Jsoupто класс классты кеңейтүүчү Documentкласстан мураска алат . Класс дагы класстан мурас алат . Методго нөл эмес сапты өткөрүп берсеңиз, сиз (жок дегенде) "баш" жана "дене" элементтерин камтыган an objectтин ийгorктүү, маңыздуу талдоосуна ээ болосуз. Эгер сизде an object бар болсо , класстын жана анын ата-энелеринин тиешелүү ыкмаларын чакырып, керектүү маалыматтарды ала аласыз . ElementNodeNodeTextNodeDocumentDocumentDocumentElementNode

HTML documentти талдоо үчүн Java программасы

Бул жерде биздин HTML сапты талдоо үчүн толук программабыз, интернеттен жүктөлүп алынган HTML файлы жана жергorктүү HTML файлы. Аны иштетүү үчүн сиз IDE (Eclipse же башка) же буйрук сабын колдоно аласыз. Eclipseте бул абдан оңой, жөн гана бул codeду көчүрүп, жаңы Java долбоорун түзүп, "src" папкасын оң баскыч менен чыкылдатып, көчүрүлгөн codeду чаптаңыз. Eclipse ылайыктуу пакетти жана тиешелүү аталыштагы баштапкы code файлын түзүүгө кам көрөт, андыктан бул бир топ азыраак иш. Эгер сизде Java долбоору бар болсо, анда бул бир гана кадам. Төмөндөгү программа HTML файлын талдоо жана өтүүнүн үч мисалын көрсөтөт. Биринчи мисалда биз түздөн-түз HTML камтыган сапты талдайбыз, экинчисинде URL'ден жүктөлүп алынган HTML файлын, үчүнчүдө жергorктүү файл тутумунан HTML documentин жүктөп алып талдайбыз.
import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

/**
* Java Program to parse/read HTML documents from File using Jsoup library.
* Jsoup is an open source library which allows Java developer to parse HTML
* files and extract elements, manipulate data, change style using DOM, CSS and
* JQuery like method.
*
* @author Javin Paul
*/
public class HTMLParser{

    public static void main(String args[]) {

        // Parse HTML String using JSoup library
        String HTMLSTring = "<!DOCTYPE html>"
                + "<html>"
                + "<head>"
                + "<title>JSoup Example</title>"
                + "</head>"
                + "<body>"
                + "<table><tr><td><h1>HelloWorld</h1></tr>"
                + "</table>"
                + "</body>"
                + "</html>";

        Document html = Jsoup.parse(HTMLSTring);
        String title = html.title();
        String h1 = html.body().getElementsByTag("h1").text();

        System.out.println("Input HTML String to JSoup :" + HTMLSTring);
        System.out.println("After parsing, Title : " + title);
        System.out.println("Afte parsing, Heading : " + h1);

        // JSoup Example 2 - Reading HTML page from URL
        Document doc;
        try {
            doc = Jsoup.connect("http://google.com/").get();
            title = doc.title();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Jsoup Can read HTML page from URL, title : " + title);

        // JSoup Example 3 - Parsing an HTML file in Java
        //Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // wrong
        Document htmlFile = null;
        try {
            htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // right
        title = htmlFile.title();
        Element div = htmlFile.getElementById("login");
        String cssClass = div.className(); // getting class form HTML element

        System.out.println("Jsoup can also parse HTML file directly");
        System.out.println("title : " + title);
        System.out.println("class of div tag : " + cssClass);
    }
}
Чыгуу:
Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>
After parsing, Title : JSoup Example
Afte parsing, Heading : HelloWorld
Jsoup Can read HTML page from URL, title : Google
Jsoup can also parse HTML file directly
title : Login Page
class of div tag : simple
Jsoup HTML талдоочу сиз берген HTMLдин "таза" талдоосун чыгаруу үчүн бардык күч-аракетин жумшайт, ал жакшы калыптанганбы же жокпу. Ал төмөнкү каталарды чече алат:
  • жабылбаган тегдер. Мисалы,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • болжолдуу тэгдер. Мисалы, ачыктар <td>Java is Great</td>оролот<table><tr><td>
  • Jsoup бекем document структураларын түзөт (HTML башты жана денени камтыйт, бирок денеде тиешелүү элементтер гана бар)
Jsoup html documentин, дене фрагменттерин, html саптарын окууну жана HTML веб-мазмунун түз талдоону абдан жөнөкөй кылган эң сонун жана ишенимдүү ачык булак китепканасы.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION