Python Internetadgang ved hjælp af Urllib.Request og urlopen()
⚡ Smart opsummering
urllib er standarden Python modul til adgang til internetdata, så programmer kan åbnes URLs og hente HTML-, JSON- eller binært indhold. Funktionen urllib.request.urlopen() opretter forbindelse til en webadresse og læser serversvaret direkte ind i Python.

Afsnittene nedenfor forklarer, hvad urllib er, hvordan man åbner en URL og læse dens HTML, og hvordan man håndterer fejl, downloader filer og vælger mellem urllib og requests-biblioteket.
Hvad er urllib?
urllib er en Python modul, der kan bruges til åbning URLs. Den definerer funktioner og klasser for at hjælpe med URL handlinger.
Med Python, kan du også tilgå og hente data fra internettet, såsom XML, HTML og JSON, og derefter arbejde direkte med disse data. I afsnittene nedenfor vil vi se, hvordan man henter data fra internettet. For eksempel bruger vi her en Guru99 video URL, få adgang til den ved hjælp af Python, og udskriv HTML-filen for dette URL.
Pakken urllib grupperer flere moduler: urllib.request til åbning URLs, urllib.error for de undtagelser, som anmodninger kan generere, urllib.parse til opbygning og parsing URLs og urllib.robotparser til læsning af robots.txt-filer.
Sådan åbnes URL bruger Urllib
Før vi kører koden for at oprette forbindelse til internetdata, skal vi importere URL biblioteksmodul eller “urllib”.
- Importer urllib
- Definer din hovedfunktion
- Deklarer variablen webUrl
- Kald derefter urlopen-funktionen på urllib-biblioteket
- URL vi åbner er Guru99 vejledning om YouTube
- Dernæst udskriver vi resultatkoden
- Resultatkoden hentes ved at kalde getcode-funktionen på den webUrl-variabel, vi har oprettet.
- Vi konverterer det til en streng, så den kan sammenkædes med vores streng "resultatkode".
- Dette vil være en almindelig HTTP-kode "200", der angiver, at HTTP-anmodningen er behandlet korrekt
Sådan får du en HTML-fil fra en URL in Python
Du kan også læse HTML-filen ved at bruge read()-funktionen i PythonNår du kører koden, vises HTML-filen i konsollen.
- Kald read()-funktionen på webUrl-variablen
- Metoden read() giver dig mulighed for at læse indholdet af datafiler
- Læs hele indholdet af URL i en variabel kaldet data
- Kør koden, og den vil udskrive dataene i HTML-format
Her er den komplette kode:
Python 2 Eksempel
# # 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 Eksempel
# # 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)
Sådan håndterer du urllib-fejl: URLFejl og HTTP-fejl
En anmodning lykkes ikke altid. Når noget går galt, genererer urllib en undtagelse i stedet for at returnere data, så det er vigtigt at håndtere disse fejl. urllib.error-modulet definerer to primære undtagelsesklasser.
- HTTP-fejl genereres, når serveren returnerer en fejlstatuskode, f.eks. 404 Ikke fundet eller 500 Intern serverfejl. Den indeholder statuskoden og svarteksten.
- URLFejl aktiveres, når serveren slet ikke kan nås, for eksempel på grund af et forkert domænenavn eller ingen internetforbindelse. Den indeholder en reason-attribut, der forklarer fejlen.
Fordi HTTPError er en underklasse af URLFejl, fang altid HTTPError først, så hver fejltype håndteres 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)
Håndtering af disse undtagelser forhindrer dit program i at gå ned og giver dig mulighed for at logge problemet, gentage anmodningen eller bruge cachelagrede data.
Sådan downloader du en fil fra en URL Brug af urllib
Læser a URL "Into Memory" fungerer for små sider, men for billeder, PDF-dokumenter eller datasæt er det nemmere at gemme svaret direkte på disken. urllib.request-modulet tilbyder to enkle måder at gøre dette på.
Funktionen urlretrieve() downloader en URL direkte til en lokal fil i en enkelt linje:
from urllib.request import urlretrieve urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")
For mere kontrol, åbn URL og skriv selv bytes. Åbn den lokale fil i binær tilstand, fordi urlopen() returnerer bytes, ikke tekst:
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())
For meget store filer, læs og skriv i en løkke ved hjælp af response.read(8192), så hele filen aldrig gemmes i hukommelsen på én gang.
urllib vs. anmodningsbiblioteket i Python
urllib er en del af Python standardbibliotek, så det fungerer overalt uden installation. Tredjepartsbiblioteket med anmodninger er ikke indbygget, men mange udviklere foretrækker det til dagligt HTTP-arbejde, fordi dets syntaks er kortere og mere læsbar.
De vigtigste forskelle er:
- Installation: urllib leveres med Python, mens anmodninger skal installeres med pip.
- afkodning: urllib returnerer rå bytes, som du selv afkoder, mens requests afkoder tekst og JSON automatisk.
- Convenience: anmodninger håndterer sessioner, cookies og brugerdefinerede headere med mindre kode.
- Afhængigheder: urllib tilføjer ingen, mens anmodninger er afhængige af urllib3 nedenunder.
Vælg urllib, når du ikke ønsker nogen afhængigheder eller kun har brug for en hurtig, engangsforespørgsel. Vælg anmodninger til større projekter, der involverer godkendelse, sessioner eller hyppige API-kald. Begge sender de samme underliggende HTTP-forespørgsler, så beslutningen afhænger af bekvemmelighed versus en mindre afhængighedsliste.


