JavaRush /Блоги Java /Random-TG /3 мисоли чӣ гуна таҳлил кардани файли HTML дар Java бо ис...
Sdu
Сатҳи

3 мисоли чӣ гуна таҳлил кардани файли HTML дар Java бо истифода аз Jsoup

Дар гурӯҳ нашр шудааст
3 мисоли таҳлor файли HTML дар Java бо истифода аз Jsoup - 1HTML асосии WEB мебошад, ҳама саҳифаҳои интернетии шумо мебинед, хоҳ онҳо бо истифода аз JavaScript, JSP, PHP, ASP ё дигар технологияҳои веб ба таври динамикӣ тавлид шудаанд, бар HTML асос ёфтаанд. Дарвоқеъ, браузери шумо HTML-ро таҳлил мекунад ва онро тавре нишон медиҳад, ки барои шумо қулай аст. Аммо чӣ мешавад, агар ба шумо лозим аст, ки ҳуҷҷати HTML-ро таҳлил кунед ва дар он ягон элемент, тег, атрибут пайдо кунед ё санҷед, ки оё як унсури мушаххас бо истифода аз барномаи Java мавҷуд аст ё не. Агар шумо якчанд сол барномасози Java мебудед, ман боварӣ дорам, ки шумо бо истифода аз таҳлилгарон ба монанди DOM ё SAX таҳлor XML-ро анҷом медодед. Аммо, тааҷҷубовар аст, ки вақтҳое ҳастанд, ки ба шумо лозим меояд, ки ҳуҷҷати HTML-ро аз барномаи асосии Java, ки Сервлетҳо ва дигар технологияҳои веби Java-ро дар бар намегирад, таҳлил кунед. Ғайр аз он, Core JDK инчунин китобхонаҳои HTTP ё HTML надорад. Аз ин рӯ, вақте сухан дар бораи таҳлor файли HTML меравад, бисёре аз барномасозони Java аз Google мепурсанд, ки чӣ тавр арзиши теги HTML дар Java ба даст оварда шавад. Вақте ки ман бо ин рӯ ба рӯ шудам, ман боварӣ доштам, ки ҳалли он китобхонаи кушодаасос хоҳад буд, ки функсияҳои ба ман лозимиро амалӣ мекунад, аммо ман намедонистам, ки он мисли Jsoup олиҷаноб ва дорои хусусиятҳо хоҳад буд. Он на танҳо барои хондан ва таҳлor файлҳои HTML, атрибутҳо, синфҳои CSS дар услуби JQuery дастгирӣ мекунад, балки дар айни замон ба шумо имкон медиҳад, ки онҳоро тағир диҳед. Бо истифода аз Jsoup шумо метавонед бо ҳуҷҷати HTML ҳама чизеро, ки мехоҳед, иҷро кунед. Дар ин мақола мо файли HTML-ро таҳлил мекунем ва номҳо ва атрибутҳои тегҳоро пайдо мекунем. Мо инчунин мисолҳои зеркашӣ ва таҳлor HTML аз файл ва ҳама гуна URL, ба монанди саҳифаи асосии Google, дида мебароем.

Jsoup чист

Jsoup китобхонаи кушодаи Java барои кор бо HTML-и воқеӣ мебошад. Он API-и хеле қулайро барои дарёфт ва коркарди додаҳо бо истифода аз беҳтарин усулҳои DOM, CSS ва jQuery пешниҳод мекунад. Jsoup мушаххасоти WHATWG HTML5-ро амалӣ мекунад ва HTML-ро ба ҳамон DOM ҳамчун браузерҳои муосир ба монанди Chrome ва Firefox таҳлил мекунад. Инҳоянд баъзе аз хусусиятҳои муфиди китобхонаи Jsoup:
  • Jsoup метавонад HTML-ро аз URL, файл ё сатр канда ва таҳлил кунад.
  • Jsoup метавонад бо истифода аз селекторҳои DOM traversal ё CSS маълумот пайдо ва истихроҷ кунад.
  • Jsoup ба шумо имкон медиҳад, ки унсурҳои HTML, атрибутҳо ва матнро идора кунед.
  • Jsoup барои пешгирии ҳамлаҳои XSS тозакунии маълумоти аз ҷониби корбар пешниҳодшударо дар рӯйхати сафед таъмин мекунад.
  • Jsoup инчунин HTML-и "тоза"-ро тавлид мекунад.
Jsoup барои кор бо намудҳои гуногуни HTML, ки дар ҷаҳони воқеӣ мавҷуданд, аз ҷумла HTML-и дуруст тасдиқшуда бо маҷмӯи тегҳои нопурра ва тасдиқнашуда тарҳрезӣ шудааст. Яке аз афзалиятҳои асосии Jsoup эътимоднокии он аст.

Таҳлor HTML дар Java бо истифода аз Jsoup

Дар ин дастур, мо се мисоли гуногуни таҳлил ва гузариши ҳуҷҷати HTML дар Java бо истифода аз Jsoup мебинем. Дар мисоли аввал, мо сатри HTML-ро, ки барчасбҳоро дар шакли хатти аслии Java дорад, таҳлил мекунем. Дар мисоли дуюм, мо ҳуҷҷати HTML-и худро аз Интернет зеркашӣ мекунем ва дар мисоли сеюм мо файли HTML-и намунавии худро login.html барои таҳлил зеркашӣ мекунем. Ин файл як ҳуҷҷати намунавии HTML мебошад, ки аз теги "унвон" ва теги "div" дар бахши "тандан" иборат аст, ки шакли HTML-ро дар бар мегирад. Форма дорои майдонҳо барои ворид кардани номи корбар ва парол, инчунин тугмаҳои барқароркунӣ ва тасдиқ барои амалҳои минбаъда мебошад. Ин "дуруст" 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 таҳлor HTML хеле осон аст, танҳо ба шумо лозим аст, ки усули статикиро даъват кунед Jsoup.parse()ва сатри HTML-и худро ба он интиқол диҳед. Jsoup якчанд усулҳои изофаборро parse()барои хондани HTML аз сатр, файл, аз URI базавӣ, аз URL ва аз InputStream. Шумо инчунин метавонед рамзгузориро барои дуруст хондани файли HTML муайян кунед, агар он дар формати UTF-8 набошад. Усул parse(String html)HTML-и воридшударо ба an objectи нав таҳлил мекунад Document. Дар Jsoup, синф Documentаз синф мерос мегирад Element, ки синфро васеъ мекунад Node. Синф низ аз синф Nodeмерос мегирад TextNode. То он даме, ки шумо як сатри бенудро ба усул мегузаред, ба шумо кафолат дода мешавад, ки таҳлor бомуваффақият ва пурмазмуни an objectи Documentдорои (ҳадди ақал) унсурҳои "сар" ва "бадан" дошта бошед. Агар шумо an object дошта бошед Document, шумо метавонед тавассути занг задан ба усулҳои мувофиқи синф Documentва волидони он Elementмаълумотҳои дилхоҳро гиред Node.

Барномаи Java барои таҳлor ҳуҷҷати HTML

Ин аст барномаи пурраи мо барои таҳлor сатри HTML, файли HTML аз интернет зеркашидашуда ва файли HTML-и маҳаллӣ. Барои иҷро кардани он, шумо метавонед IDE (Eclipse ё ягон дигар) ё сатри фармонро истифода баред. Дар Eclipse ин хеле осон аст, танҳо ин рамзро нусхабардорӣ кунед, лоиҳаи нави Java эҷод кунед, папкаи "src" -ро бо тугмаи рост клик кунед ва рамзи нусхабардориро часбонед. Eclipse барои сохтани бастаи мувофиқ ва файли codeи ибтидоӣ бо номи мувофиқ ғамхорӣ мекунад, бинобар ин ин кори хеле камтар аст. Агар шумо аллакай лоиҳаи Java дошта бошед, ин танҳо як қадам аст. Барномаи зер се мисоли таҳлил ва гузариши файли HTML-ро нишон медиҳад. Дар мисоли аввал, мо бевосита сатри дорои HTML-ро таҳлил мекунем, дар дуюм файли HTML-и аз URL зеркашидашуда, дар сеюм мо ҳуҷҷати HTML-ро аз системаи файлии маҳаллӣ зеркашӣ ва таҳлил мекунем.
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
Таҳлилгари HTML Jsoup тамоми кӯшишро ба харҷ медиҳад, ки таҳлor "тоза"-и HTML-и пешниҳодкардаи шумо, новобаста аз он, ки он хуб ташаккул ёфтааст ё не. Он метавонад хатогиҳои зеринро ҳал кунад:
  • барчаспҳои пӯшида. Барои намуна,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • барчаспҳои дар назар дошташуда. Масалан, кушодашудаҳо <td>Java is Great</td>печонида мешаванд<table><tr><td>
  • Jsoup сохторҳои мустаҳками ҳуҷҷатро эҷод мекунад (HTML дорои сар ва бадан аст, аммо бадан танҳо унсурҳои дахлдорро дар бар мегирад)
Jsoup як китобхонаи аъло ва боэътимоди кушода аст, ки хондани ҳуҷҷати html, порчаҳои бадан, сатрҳои html ва мустақиман таҳлor мундариҷаи веби HTMLро хеле содда мекунад.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION