Continuăm traducerea articolului despre parsarea sau accesarea site-urilor utilizând c #.
Clasa WebClient se află în spațiul de nume SyStem.Net și implementează capacitatea de a prelua datele de pe Internet. Folosind-o, puteți obține codul sursă HTML ca un șir sau ca fișier.
Exemplu: Obțineți codul sursă pentru google.com
- Adăugăm un buton la formular și la RichTextBox
- Facem clic pe buton de două ori cu mouse-ul. Aceasta adaugă un eveniment clic pe buton
- Adăugăm următorul cod la acest eveniment:
Utilizăm metoda DownLoadString care returnează datele ca șir și adăugăm această linie în richtextbox. Rezultatul lucrării este următorul:
Apoi, puteți aplica expresii regulate (RegEx) la șirul primit, obținând informațiile necesare (de exemplu, astfel puteți obține rapid, adică prindeți poze, e-mailuri, link-uri etc.).
Exemplu: Decuparea imaginilor
După primirea codului paginii în exemplul anterior și găsirea, să zicem, a tuturor legăturilor către imagini (după cum vom descrie mai târziu), putem salva toate imaginile pe computerul nostru în felul următor:
Exemplu: modul Blocare WebClient
- Adăugați următorul cod la evenimentul de clic:
- După ce executați proiectul și faceți clic pe buton, încercați să mutați formularul sau să faceți clic pe orice alte elemente de formă. Nu va răspunde acțiunilor tale. Formularul este blocat de funcționarea citirii datelor de pe site-ul pe care l-ați specificat
- De ce se întâmplă acest lucru? Lucru este că liniile de încărcare, fișier sau alte date de pe Internet poate lua o lungă perioadă de timp (în funcție de viteza conexiunii, incarcarea serverului, etc.), și clasa WebClient, în exemplul nostru, lucrează în flux, care este responsabil pentru desen interfață utilizator (UI). Aceasta duce la suspendarea formularului.
- Acest lucru înseamnă că firul nu va continua să proceseze alte comenzi ulterioare ale programului nostru până când nu primește toate datele solicitate de pe Internet. Acest lucru se numește modul de blocare. Ieșirea este de a utiliza modul non-blocare (asincron
Exemplu: Modul WebClient fără blocare
- Folosim procedura DownloadStringAsync () - care va începe să descarce datele de pe Internet (în acest caz ca șir) într-un thread separat. Aceasta înseamnă că aplicația noastră va funcționa mai mult atâta timp cât datele sunt descărcate în paralel
- Codul de mai sus descarcă datele într-un șir, fără a bloca aplicația. Dar nu știm când vor fi descărcate pe deplin datele. Pentru a face acest lucru, trebuie să definiți un eveniment de finalizare a descărcării, astfel încât aplicația să ne poată informa despre sfârșitul operației. În acest caz, trebuie să adăugăm procesarea evenimentului DownloadStringCompleted.
- Următorul cod va începe să descarce datele de pe Internet ca un șir în modul non-blocare și după finalizarea descărcării va declanșa evenimentul DownloadStringCompleted, prin aceasta notificând.
- Șirul încărcat este transmis ca argument pentru evenimentul DownloadStringAsync și îl putem procesa mai departe în modul următor
Exemplu: Încărcarea fișierelor în Gazduire
Parsarea site-urilor pe c #. Partea 2. Folosind WebClient