Python Acces la Internet folosind Urllib.Request și urlopen()

⚡ Rezumat inteligent

urllib este standardul Python modul pentru accesarea datelor de pe internet, permițând deschiderea programelor URLs și preia conținut HTML, JSON sau binar. Funcția urllib.request.urlopen() se conectează la o adresă web și citește răspunsul serverului direct în Python.

  • 🔘 Bibliotecă standard: urllib este livrat cu Python și include modulele request, error, parse și robotparser pentru URL sarcini.
  • ☑️ Deschis o URL: Funcția urllib.request.urlopen() deschide o conexiune, iar getcode() returnează starea HTTP, cum ar fi 200.
  • Citește răspunsul: Metoda read() returnează octeți bruti, pe care decode(„utf-8”) îi convertește în text lizibil.
  • 🧪 Gestionarea erorilor: Detectează eroarea HTTP și URLEroare de la urllib.error, deci cererile eșuate nu duc niciodată la blocarea programului.
  • 🛠️ Descărcați fișiere: Funcția urlretrieve() salvează orice URL direct pe disc, ideal pentru imagini, PDF-uri și seturi de date.
  • 🤖 Pregătit pentru inteligența artificială: urllib preia seturi de date și date API care alimentează modele de învățare automată și conducte de inteligență artificială.

Python Acces la internet folosind Urllib

Secțiunile de mai jos explică ce este urllib, cum se deschide un fișier URL și cum să citești codul HTML al acestuia și cum să gestionezi erorile, să descarci fișiere și să alegi între urllib și biblioteca de cereri.

Ce este urllib?

urllib este o Python modul care poate fi folosit pentru deschidere URLs. Definește funcții și clase care ajută la URL acțiuni.

cu Python, puteți accesa și recupera date de pe internet, cum ar fi XML, HTML și JSON, și apoi puteți lucra direct cu aceste date. În secțiunile de mai jos, vom vedea cum se recuperează date de pe web. De exemplu, aici folosim un Guru99 video URL, accesați-l folosind Pythonși afișează fișierul HTML al acestuia URL.

Pachetul urllib grupează mai multe module: urllib.request pentru deschidere URLs, urllib.error pentru excepțiile pe care le pot ridica cererile, urllib.parse pentru construire și parsare URLs și urllib.robotparser pentru citirea fișierelor robots.txt.

Cum se deschide URL folosind Urllib

Înainte de a rula codul pentru conectarea la datele de internet, trebuie să importăm URL modul de bibliotecă sau „urllib”.

Operatii Deschise URL folosind Urllib

  • Import urllib
  • Definiți funcția principală
  • Declarați variabila webUrl
  • Apoi apelați funcția urlopen din biblioteca urllib
  • URL deschidem este Guru99 tutoriale despre YouTube
  • În continuare, imprimăm codul rezultat
  • Codul rezultat este recuperat prin apelarea funcției getcode pe variabila webUrl pe care am creat-o.
  • Conversim asta într-un șir de caractere, astfel încât să poată fi concatenat cu șirul nostru „cod rezultat”.
  • Acesta va fi un cod HTTP obișnuit „200”, indicând faptul că solicitarea HTTP a fost procesată cu succes.

Cum se obține un fișier HTML dintr-un URL in Python

De asemenea, puteți citi fișierul HTML folosind funcția read() din PythonCând rulați codul, fișierul HTML va apărea în consolă.

Fișier HTML de la URL in Python

  • Apelați funcția read() pe variabila webUrl
  • Metoda read() vă permite să citiți conținutul fișierelor de date
  • Citiți întregul conținut al URL într-o variabilă numită date
  • Rulați codul și acesta va afișa datele în format HTML

Iată codul complet:

Python 2 Exemplu

#  
# read the data from the URL and print it
#
import urllib2

def main():
# open a connection to a URL using urllib2
   webUrl = urllib2.urlopen("https://www.youtube.com/user/guru99com")
  
#get the result code and print it
   print "result code: " + str(webUrl.getcode()) 
  
# read the data from the URL and print it
   data = webUrl.read()
   print data
 
if __name__ == "__main__":
  main()

Python 3 Exemplu

#
# read the data from the URL and print it
#
import urllib.request
# open a connection to a URL using urllib
webUrl  = urllib.request.urlopen('https://www.youtube.com/user/guru99com')

#get the result code and print it
print ("result code: " + str(webUrl.getcode()))

# read the data from the URL and print it
data = webUrl.read()
print (data)

Cum se gestionează erorile urllib: URLEroare și HTTPError

O cerere nu are întotdeauna succes. Când ceva nu merge bine, urllib generează o excepție în loc să returneze date, așa că este important să se gestioneze aceste erori. Modulul urllib.error definește două clase principale de excepții.

  • Eroare HTTP este generată atunci când serverul returnează un cod de stare de eroare, cum ar fi 404 Not Found sau 500 Internal Server Error. Aceasta conține codul de stare și corpul răspunsului.
  • URLEroare este generată atunci când serverul nu poate fi accesat deloc, de exemplu din cauza unui nume de domeniu greșit sau a lipsei unei conexiuni la internet. Aceasta conține un atribut reason care explică eroarea.

Deoarece HTTPError este o subclasă a URLEroare, detectați întotdeauna mai întâi HTTPError, astfel încât fiecare tip de eroare să fie gestionat separat:

from urllib.request import urlopen
from urllib.error import HTTPError, URLError

try:
    response = urlopen("https://www.guru99.com/no-such-page.html")
    data = response.read()
except HTTPError as error:
    print("HTTP error:", error.code)
except URLError as error:
    print("URL error:", error.reason)

Gestionarea acestor excepții previne blocarea programului și vă permite să înregistrați problema, să reîncercați solicitarea sau să reveniți la datele din cache.

Cum se descarcă un fișier dintr-un URL Folosind urllib

Citirea a URL Salvarea în memorie funcționează pentru pagini mici, dar pentru imagini, documente PDF sau seturi de date este mai ușor să salvați răspunsul direct pe disc. Modulul urllib.request oferă două modalități simple de a face acest lucru.

Funcția urlretrieve() descarcă un URL direct către un fișier local într-o singură linie:

from urllib.request import urlretrieve

urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")

Pentru mai mult control, deschideți URL și scrieți singuri octeții. Deschideți fișierul local în mod binar deoarece urlopen() returnează octeți, nu text:

from urllib.request import urlopen

with urlopen("https://example.com/data.zip") as response:
    with open("data.zip", "wb") as file:
        file.write(response.read())

Pentru fișiere foarte mari, citiți și scrieți într-o buclă folosind response.read(8192), astfel încât întregul fișier să nu fie niciodată ținut în memorie simultan.

urllib vs. biblioteca de cereri din Python

urllib face parte din Python bibliotecă standard, deci funcționează peste tot fără instalare. Biblioteca de cereri terțe nu este încorporată, dar mulți dezvoltatori o preferă pentru munca HTTP de zi cu zi, deoarece sintaxa sa este mai scurtă și mai ușor de citit.

Principalele diferențe sunt:

  • Instalare: urllib este livrat cu Python, în timp ce cererile trebuie instalate cu pip.
  • Decodare: urllib returnează octeți bruti pe care îi decodați singuri, în timp ce cererile decodează automat textul și JSON-ul.
  • Confort: Request-urile gestionează sesiunile, cookie-urile și anteturile personalizate cu mai puțin cod.
  • dependenţe: urllib nu adaugă nimic, în timp ce cererile se bazează pe urllib3 dedesubt.

Alegeți urllib atunci când nu doriți dependențe sau aveți nevoie doar de o solicitare rapidă și unică. Alegeți solicitări pentru proiecte mai mari care implică autentificare, sesiuni sau apeluri API frecvente. Ambele trimit aceleași solicitări HTTP subiacente, așa că decizia se reduce la comoditate față de o listă de dependențe mai mică.

Întrebări frecvente

Funcția urlopen() returnează un obiect de răspuns HTTP, de obicei un obiect http.client.HTTPResponse. Apelați funcția read() pentru a obține octeții bruti, funcția getcode() pentru a citi codul de stare și funcția headers sau info() pentru a inspecta metadatele precum tipul și lungimea conținutului.

urllib2 a aparținut Python 2. În Python 3 a fost reorganizat: caracteristicile sale au fost împărțite în urllib.request pentru deschidere URLs și urllib.error pentru excepții. Code scris pentru urllib2 trebuie actualizat pentru a importa în schimb urllib.request.

read() returnează octeți, nu un șir de caractere, deoarece urlopen() nu cunoaște codificarea în avans. Apelul funcției decode(„utf-8”) convertește acei octeți în text lizibil, astfel încât să puteți imprima, căuta sau analiza conținutul HTML sau JSON.

Deschideți URL cu urlopen(), citește octeții, îi decodează, apoi îi analizează cu modulul json: json.loads(response.read().decode(“utf-8”)). Aceasta returnează un Python dicționar sau listă pe care o puteți utiliza direct, ceea ce este comun la apelarea API-urilor web.

Înfășurați URL într-un obiect urllib.request.Request și adăugați antetul înainte de a-l deschide: request.add_header(„User-Agent”, „Mozilla/5.0”), apoi transmiteți cererea către urlopen(). Anteturile personalizate ajută atunci când un server blochează adresa implicită Python agent utilizator.

Da. urllib poate prelua seturi de date, fișiere CSV și JSON din API-uri web, pe care apoi le decodați și le încărcați în pandas sau NumPy. Este o modalitate ușoară și fără dependențe de a extrage date de antrenament într-un pipeline de învățare automată.

Da. GitHub Copilot completează automat modelele urllib comune, cum ar fi apelurile urlopen(), obiectele Request și gestionarea erorilor try/except. Accelerează procesul standard, dar ar trebui să verificați în continuare URLs, anteturi și gestionarea excepțiilor sugerate de asistentul AI.

Codificați parametrii cu urllib.parse.urlencode(), convertiți-i în octeți cu encode(), apoi transmiteți-i ca argument de date către urlopen() sau un obiect Request. Furnizarea de date face ca urllib să trimită automat o cerere POST în loc de o cerere GET.

Rezumați această postare cu: