Python Internett-tilgang med Urllib.Request og urlopen()
โก Smart oppsummering
urllib er standarden Python modul for tilgang til internettdata, slik at programmer kan รฅpnes URLs og hente HTML-, JSON- eller binรฆrt innhold. urllib.request.urlopen()-funksjonen kobler seg til en nettadresse og leser serversvaret direkte inn i Python.

Avsnittene nedenfor forklarer hva urllib er, hvordan man รฅpner en URL og lese HTML-koden, og hvordan man hรฅndterer feil, laster ned filer og velger mellom urllib og forespรธrselsbiblioteket.
Hva er urllib?
urllib er en Python modul som kan brukes til รฅ รฅpne URLs. Den definerer funksjoner og klasser for รฅ hjelpe til med URL handlinger.
Med Python, kan du ogsรฅ fรฅ tilgang til og hente data fra internett, for eksempel XML, HTML og JSON, og deretter jobbe direkte med disse dataene. I avsnittene nedenfor skal vi se hvordan du henter data fra nettet. For eksempel bruker vi her en Guru99 video URL, fรฅ tilgang til den ved hjelp av Python, og skriv ut HTML-filen til dette URL.
Pakken urllib grupperer flere moduler: urllib.request for รฅpning URLs, urllib.error for unntakene som forespรธrsler kan generere, urllib.parse for bygging og parsing URLs og urllib.robotparser for รฅ lese robots.txt-filer.
Hvordan รฅpne URL bruker Urllib
Fรธr vi kjรธrer koden for รฅ koble til internettdata, mรฅ vi importere URL bibliotekmodul, eller ยซurllibยป.
- Importer urllib
- Definer hovedfunksjonen din
- Deklarer variabelen webUrl
- Kall deretter urlopen-funksjonen pรฅ urllib-biblioteket
- Ocuco URL vi รฅpner er Guru99 veiledning om YouTube
- Deretter skriver vi ut resultatkoden
- Resultatkoden hentes ved รฅ kalle getcode-funksjonen pรฅ webUrl-variabelen vi har opprettet.
- Vi konverterer det til en streng, slik at den kan sammenkobles med strengen vรฅr ยซresultatkodeยป.
- Dette vil vรฆre en vanlig HTTP-kode ยซ200ยป, som indikerer at HTTP-forespรธrselen er behandlet
Slik fรฅr du tak i en HTML-fil fra en URL in Python
Du kan ogsรฅ lese HTML-filen ved รฅ bruke read()-funksjonen i PythonNรฅr du kjรธrer koden, vil HTML-filen vises i konsollen.
- Kall read()-funksjonen pรฅ webUrl-variabelen
- read()-metoden lar deg lese innholdet i datafiler
- Les hele innholdet i URL inn i en variabel kalt data
- Kjรธr koden, sรฅ skrives dataene ut i HTML-format
Her er hele koden:
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)
Slik hรฅndterer du urllib-feil: URLFeil og HTTP-feil
En forespรธrsel lykkes ikke alltid. Nรฅr noe gรฅr galt, genererer urllib et unntak i stedet for รฅ returnere data, sรฅ det er viktig รฅ hรฅndtere disse feilene. urllib.error-modulen definerer to hovedunntaksklasser.
- HTTP-feil genereres nรฅr serveren returnerer en feilstatuskode, for eksempel 404 Ikke funnet eller 500 Intern serverfeil. Den inneholder statuskoden og svarteksten.
- URLFeil oppstรฅr nรฅr serveren ikke kan nรฅs i det hele tatt, for eksempel pรฅ grunn av feil domenenavn eller ingen internettforbindelse. Den har et reason-attributt som forklarer feilen.
Fordi HTTPError er en underklasse av URLFeil, fang alltid HTTPError fรธrst, slik at hver feiltype 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 av disse unntakene hindrer programmet i รฅ krasje og lar deg logge problemet, prรธve forespรธrselen pรฅ nytt eller gรฅ tilbake til hurtigbufrede data.
Slik laster du ned en fil fra en URL Bruk av urllib
lese en URL inn i minnet fungerer for smรฅ sider, men for bilder, PDF-dokumenter eller datasett er det enklere รฅ lagre svaret direkte pรฅ disk. urllib.request-modulen tilbyr to enkle mรฅter รฅ gjรธre dette pรฅ.
Funksjonen urlretrieve() laster ned en URL direkte til en lokal fil i รฉn linje:
from urllib.request import urlretrieve urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")
For mer kontroll, รฅpne URL og skriv bytene selv. ร pne den lokale filen i binรฆrmodus fordi urlopen() returnerer byte, 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 veldig store filer, les og skriv i en lรธkke ved hjelp av response.read(8192) slik at hele filen aldri lagres i minnet samtidig.
urllib vs. forespรธrselsbiblioteket i Python
urllib er en del av Python standardbibliotek, slik at det fungerer overalt uten installasjon. Tredjepartsforespรธrselsbiblioteket er ikke innebygd, men mange utviklere foretrekker det til daglig HTTP-arbeid fordi syntaksen er kortere og mer lesbar.
De viktigste forskjellene er:
- Installasjon: urllib leveres med Python, mens forespรธrsler mรฅ installeres med pip.
- Dekoding: urllib returnerer rรฅ byte som du dekoder selv, mens forespรธrsler dekoder tekst og JSON automatisk.
- Convenience: forespรธrsler hรฅndterer รธkter, informasjonskapsler og tilpassede overskrifter med mindre kode.
- avhengig~~POS=TRUNC: urllib legger ikke til noen, mens forespรธrsler er avhengige av urllib3 under.
Velg urllib nรฅr du ikke vil ha noen avhengigheter eller bare trenger en rask, engangsforespรธrsel. Velg forespรธrsler for stรธrre prosjekter som involverer autentisering, รธkter eller hyppige API-kall. Begge sender de samme underliggende HTTP-forespรธrslene, sรฅ avgjรธrelsen avhenger av bekvemmelighet kontra en mindre avhengighetsliste.


