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.

  • ๐Ÿ”˜ Standardbibliotek: urllib leveres med Python og samler forespรธrsels-, feil-, parse- og robotparser-modulene for URL oppgaver.
  • โ˜‘๏ธ ร…pne en URL: Funksjonen urllib.request.urlopen() รฅpner en tilkobling, og getcode() returnerer HTTP-statusen, for eksempel 200.
  • โœ… Les svaret: read()-metoden returnerer rรฅ byte, som decode("utf-8") konverterer til lesbar tekst.
  • ๐Ÿงช Hรฅndtere feil: Fang HTTP-feil og URLFeil fra urllib.error, slik at mislykkede forespรธrsler aldri krasjer programmet.
  • ๐Ÿ› ๏ธ Last ned filer: Funksjonen urlretrieve() lagrer alle URL rett til disk, ideelt for bilder, PDF-er og datasett.
  • ๐Ÿค– AI-klar: urllib henter datasett og API-data som mater maskinlรฆringsmodeller og AI-pipelines.

Python Internett-tilgang ved hjelp av Urllib

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ยป.

Open URL bruker 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.

HTML-fil fra URL in Python

  • 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.

Spรธrsmรฅl og svar

urlopen() returnerer et HTTP-responsobjekt, vanligvis en http.client.HTTPResponse. Du kaller read() for รฅ fรฅ rรฅ byte, getcode() for รฅ lese statuskoden og headers eller info() for รฅ inspisere metadata som innholdstype og lengde.

urllib2 tilhรธrte Python 2. i Python 3 den ble omorganisert: funksjonene ble delt inn i urllib.request for รฅpning URLs og urllib.error for unntak. Code skrevet for urllib2 mรฅ oppdateres for รฅ importere urllib.request i stedet.

read() returnerer byte, ikke en streng, fordi urlopen() ikke kjenner kodingen pรฅ forhรฅnd. Kalling av decode("utf-8") konverterer disse bytene til lesbar tekst slik at du kan skrive ut, sรธke i eller analysere HTML- eller JSON-innholdet.

ร…pne URL med urlopen(), les bytene, dekoder dem, og analyser dem deretter med json-modulen: json.loads(response.read().decode("utf-8")). Dette returnerer en Python ordbok eller liste du kan bruke direkte, noe som er vanlig nรฅr man kaller web-API-er.

Pakk inn URL i et urllib.request.Request-objekt og legg til headeren fรธr du รฅpner den: request.add_header(โ€œUser-Agentโ€, โ€œMozilla/5.0โ€), og send deretter forespรธrselen til urlopen(). Tilpassede headere hjelper nรฅr en server blokkerer standard Python brukeragent.

Ja. urllib kan hente datasett, CSV-filer og JSON fra web-API-er, som du deretter dekoder og laster inn i Pandas eller NumPy. Det er en lett og avhengighetsfri mรฅte รฅ hente treningsdata inn i en maskinlรฆringspipeline.

Ja. GitHub Copilot fullfรธrer automatisk vanlige urllib-mรธnstre som urlopen()-kall, forespรธrselsobjekter og hรฅndtering av try/except-feil. Det รธker hastigheten pรฅ standardversjonen, men du bรธr fortsatt bekrefte URLs, overskrifter og unntakshรฅndtering som AI-assistenten foreslรฅr.

Kod parameterne dine med urllib.parse.urlencode(), konverter dem til byte med encode(), og send dem deretter som dataargumentet til urlopen() eller et Request-objekt. Hvis du angir data, sender urllib automatisk en POST i stedet for en GET-forespรธrsel.

Oppsummer dette innlegget med: