Trei funcții concepute pentru a extrage numai informațiile corecte dintr-un document HTML. Administratorii sistemelor Windows trebuie să extragă periodic informații specifice din documentele HTML. Un astfel de document poate fi un fișier local, o pagină de stare a unui dispozitiv conectat la o rețea locală, un raport dintr-o bază de date accesibilă pe Web sau orice altă mii de tipuri de pagini. În fiecare dintre aceste cazuri, avem de obicei două probleme de utilizare a datelor. Primul este să vă conectați la pagina Web dorită și să citiți datele conținute în aceasta.
ARUBA INSTANT WI-FI: SIMPLĂ, PUTERNICĂ, DISPONIBILĂ
Trei funcții concepute pentru a extrage numai informațiile corecte dintr-un document HTML
Administratorii sistemelor Windows trebuie să extragă periodic informații specifice din documentele HTML. Un astfel de document poate fi un fișier local, o pagină de stare a unui dispozitiv conectat la o rețea locală, un raport dintr-o bază de date accesibilă pe Web sau orice altă mii de tipuri de pagini. În fiecare dintre aceste cazuri, avem de obicei două probleme de utilizare a datelor. Primul este să vă conectați la pagina Web dorită și să citiți datele conținute în aceasta. Faptul este că, dacă o pagină nu este un fișier static, accesibil prin orice resurse partajate pentru Windows sau sistemul de fișiere din rețeaua noastră, nu putem citi conținutul utilizând instrumente standard, cum ar fi, de exemplu, obiect Scripting.FileSystemObject. În plus, pentru a accesa dispozitivul care servește paginii Web de interes, este posibil să fie necesar să specificați numele de utilizator și parola corespunzătoare. Cu toate acestea, după rezolvarea acestei probleme, ne confruntăm cu o sarcină și mai dificilă: cum să extrageți informațiile de interes din codul HTML brut (brut)?
Recuperarea datelor
Lucrul cu interogatorul XMLHTTP este împărțit în trei etape: configurarea unei conexiuni, trimiterea unei cereri și primirea unui răspuns. Pentru această componentă, deschiderea unei conexiuni presupune și o descriere detaliată a parametrilor acesteia. Sintaxa completă pentru a apela metoda deschisă a obiectului Microsoft.XMLHTTP este după cum urmează (argumentele opționale sunt date în paranteze pătrate):
Aici metoda este un argument șir care descrie tipul de interogare care este executat. În cazul conexiunilor HTTP, acesta are de obicei valoarea "GET". Argumentul url este, de asemenea, un parametru șir, în care, atunci când accesează date de la distanță, calea corectă a adresei URL trebuie definită integral. Când lucrați cu fișiere locale, acest argument este de asemenea utilizat, dar în acest caz este calea completă la fișierul cu care se presupune că funcționează (cu fișierul prefix: // în descrierea căii pe care nu trebuie să o utilizați).
Argumentul opțional este async pentru a indica solicitantului în cazul în care el ar trebui să aștepte un răspuns (modul sincron, aceasta corespunde unei valori False) sau trece la următoarea linie de cod imediat după trimiterea solicitării (modul asincron - valoare reală). Dacă acest argument este omis, implicit este dus la Adevărat, dar în acest exemplu, este inacceptabil, pentru că, după trimiterea cererii este necesară pentru script-ul așteptați un răspuns, pentru că în script-ul imediat după trimiterea solicitării, procesarea rezultatelor. Deci, în acest caz trebuie setat valoarea False.
Următoarele două argumente vor fi utile în cazul accesului la resurse cu acces limitat, dar este necesar să le setați riguros în scripturi cu grijă. Dacă sunt necesare un nume de utilizator și o parolă pentru a accesa resursa, ele pot fi specificate, respectiv, ca argumente de utilizator și de pass. care evită o eroare de autentificare atunci când interogarea este executată. Dar dacă nu aveți nevoie de autentificare pentru a accesa resursa de interes, atunci nu este nevoie să specificați aceste argumente sau puteți specifica un șir gol - fie cu vbNullString, fie cu caracterul de ghilimele duble (""). Acum avem toate informațiile necesare pentru a stabili conexiunea și adăugăm următoarea linie la scenariu:
Așadar, am configurat și stabilit conexiunea, însă cererea în sine nu a fost încă încheiată. Pentru aceasta, utilizați metoda de trimitere:
La sfârșitul interogării, datele sunt accesate utilizând proprietatea responseText a interogatorului:
Acum întreaga pagină a devenit pe deplin disponibilă ca date pentru scenariul nostru. Trebuie să spun că toate explicațiile mele au fost destul de lungi, dar codul care implementează aceste proceduri constă doar din patru linii. Și mai aproape de sfârșitul articolului, acest cod va fi integrat în funcție, după care devine clar cum îl puteți numi cu o singură linie.
Se poate observa că un nivel semnificativ de "zgomot" este prezent în datele rezultate din interogare și, în consecință, pentru a izola informațiile de interes, acest zgomot trebuie filtrat. Cu alte cuvinte, avem mai mult de 200 de linii de text și aproximativ 1250 de cuvinte, iar în această întreagă masă trebuie doar să găsim cuvântul care ne interesează.
Filtrarea zgomotului
Ar fi bine să avem un mecanism pentru eliminarea rapidă a acestor zgomote. În principiu, etichetele HTML și XML pot fi filtrate prin încărcarea datelor primite într-un obiect XmlDocument sau HtmlDocument și apoi executarea unei interogări care returnează numai textul documentului. Cu toate acestea, dacă datele nu îndeplinesc pe deplin cerințele obiectului utilizat, acest lucru poate duce la probleme.
În general, în opinia mea, în această abordare există mai mult risc decât avantaje și de aceea. Obiectul XmlDocument poate funcționa cu pagina de configurare a routerului nostru, dar dacă nu are un format de document XML complet valid, procesarea va eșua. În ceea ce privește obiectul HtmlDocument, în principiu, acesta oferă capacități excelente de filtrare pentru conținut nedorit, dar există un risc semnificativ asociat cu acesta, deoarece lucrarea scenariului nostru va fi întreruptă. Dacă pagina conține date neregulate - și poate fi un conținut care este procesat fără erori în IE - atunci în acest caz obiectul HtmlDocument poate genera o fereastră de eroare care blochează interfața. Iar scriptul însuși poate, totuși, să continue să lucreze pe această pagină cu un document virtual, ceea ce va duce, în consecință, la o muncă instabilă.
Deci, mai întâi trebuie să creați o referință la mecanismul de lucru cu expresii regulate în VBScript. Deoarece un fragment de interes poate fi găsit în mai multe rânduri de date extrase, trebuie să folosim proprietățile Multiline și Global:
Primul pas în procesul de selectare a informațiilor țintă este eliminarea tuturor etichetelor HTML din datele totale. Deoarece etichetele HTML și XML încep întotdeauna și se termină cu caracterele parantezelor unghiulare (<>), ele pot fi ușor identificate prin aplicarea modelului următor:
Cei care au experiență cu expresii regulate și-au dat deja seama că acest model determină căutarea unor șiruri care încep cu caracterul "". Cu toate acestea, mulți pot fi confundați de partea expresiei din interiorul consolelor unghiulare (adică [^>] +). Când în expresie este utilizat un caracter de inserare (^), cuprins între caracterele setului de caractere ([) și (]), acest lucru specifică potrivirile cu orice caractere care nu sunt incluse în setul dat. Semnul plus (+) este mai frecvent pentru cei care folosesc expresii regulate; înseamnă identificarea coincidențelor cu o secvență de unul sau mai multe caractere dintr-un set dat. Prin urmare, expresia [^>] + indică detectarea unei potriviri cu orice alt caracter decât>. Astfel, o descriere completă a modelului] +> definește detectarea oricăror secvențe care încep cu caracterul. dar care nu conține simbolul>.
După ce au fost identificate toate etichetele, rămâne să le eliminați. Pentru aceasta, folosim expresia regulată în modul de înlocuire, înlocuind liniile goale pentru etichete:
Dacă vă uitați la o pagină Web standard după efectuarea acestei operații, observăm că pe ea rămân o cantitate semnificativă de date, majoritatea fiind goale, adică o combinație de file, spații standard și caractere de la sfârșitul liniei. De asemenea, există caractere speciale HTML. Deși în pagina de configurare web exemplul router-ului de prezența lor nu este esențială, cu toate acestea, are sens pentru a șterge pagina de la unul dintre aceste personaje, deoarece aceasta va facilita procesul de căutare ulterioară: este un spațiu simbol special non-rupere, de obicei indicată pe Paginile web ca "". În acest caz, pentru a înlocui acest simbol, puteți folosi din nou capabilitățile expresiilor regulate, dar este mai ușor să utilizați funcția de înlocuire a simbolurilor din VBScript. Folosind următoarea comandă, fiecare dintre aceste caractere speciale va fi înlocuit cu un caracter spațiu:
Ultimul pas al procedurii generale de curățare este de a transforma toate secvențele de caractere goale găsite în datele noastre în caractere spațioase. Acest lucru este necesar pentru ca atunci când căutați o linie, nu trebuie să determinați câte caractere (și ce tip) separabile nu separă un cuvânt de altul. Pentru a converti golurile în caractere cu spațiu unic, definim un nou model de expresie regulată care se potrivește cu unul sau mai multe caractere goale de orice tip:
Apoi, înlocuiți fiecare dintre potrigerile găsite de caracterul spațial unic:
Informații importante
Cele mai multe lucrări rămase vor fi specifice fiecărei pagini Web din care doriți să obțineți informații, dar în cele mai multe cazuri se poate face folosind două sau trei rânduri de cod. Cele mai multe dintre sarcinile de monitorizare și gestionare a rețelei estimează în esență proceduri repetate de accesare a mai multor pagini, astfel încât costurile reduse de timp necesare pentru a crea un instrument software pentru a extrage informațiile necesare vor deveni rapid justificate.
și plasați-o în partea stângă a valorii 256.261.381.125.
Prezența acestor funcții va simplifica procesul de adaptare a acestui scenariu la sarcini specifice. În special, dacă aveți experiența extragerii materialelor dorite din pagini cu ajutorul expresiilor regulate și preferați să le faceți în mod obișnuit, puteți utiliza funcția GetWebXml numai pentru a prelua datele și apoi pentru a le procesa corect. Dacă preferați să utilizați soluții gata, dar aveți anumite cerințe specifice (de exemplu, trebuie să extrageți nu una, ci mai multe linii), atunci puteți utiliza funcția CleanTaggedText și ignora funcția GetSubString. Și, în final, dacă trebuie doar să extrageți o singură linie din întreaga pagină și să obțineți textul unic corespunzător înainte de valoarea însăși și după ea, atunci puteți utiliza toate cele trei funcții, la fel ca și mine.
Listarea 1. Un script pentru a prelua informații de pe o pagină Web.
Distribuiți materialul împreună cu colegii și prietenii