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.

  • 🔘 Standardbibliotek: urllib leveres med Python og samler request-, error-, parse- og robotparser-modulerne for URL opgaver.
  • ☑️ Åbn en URL: Funktionen urllib.request.urlopen() åbner en forbindelse, og getcode() returnerer HTTP-statussen, f.eks. 200.
  • Læs svaret: read()-metoden returnerer rå bytes, som decode("utf-8") konverterer til læsbar tekst.
  • 🧪 Håndter fejl: Fang HTTP-fejl og URLFejl fra urllib.error, så mislykkede anmodninger aldrig får programmet til at gå ned.
  • 🛠️ Download filer: Funktionen urlretrieve() gemmer alle URL direkte til disk, ideel til billeder, PDF'er og datasæt.
  • 🤖 AI-klar: urllib henter datasæt og API-data, der føder maskinlæringsmodeller og AI-pipelines.

Python Internetadgang ved hjælp af Urllib

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

Åbne URL bruger 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.

HTML-fil fra URL in Python

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

Ofte Stillede Spørgsmål

urlopen() returnerer et HTTP-svarobjekt, normalt en http.client.HTTPResponse. Du kalder read() for at få de rå bytes, getcode() for at læse statuskoden og headers eller info() for at inspicere metadata såsom indholdstype og længde.

urllib2 tilhørte Python 2. i Python 3 den blev reorganiseret: dens funktioner blev opdelt i urllib.request til åbning URLs og urllib.error for undtagelser. Code skrevet til urllib2 skal opdateres for at importere urllib.request i stedet.

read() returnerer bytes, ikke en streng, fordi urlopen() ikke kender kodningen på forhånd. Kald af decode("utf-8") konverterer disse bytes til læsbar tekst, så du kan udskrive, søge i eller analysere HTML- eller JSON-indholdet.

Åbne URL med urlopen(), læs bytesene, afkod dem, og pars dem derefter med json-modulet: json.loads(response.read().decode("utf-8")). Dette returnerer en Python ordbog eller liste, du kan bruge direkte, hvilket er almindeligt, når man kalder web-API'er.

Pak den ind URL i et urllib.request.Request-objekt og tilføj headeren, før du åbner det: request.add_header(“User-Agent”, “Mozilla/5.0”), og send derefter anmodningen til urlopen(). Brugerdefinerede headere hjælper, når en server blokerer standardindstillingen. Python brugeragent.

Ja. urllib kan hente datasæt, CSV-filer og JSON fra web-API'er, som du derefter afkoder og indlæser i Pandas eller NumPy. Det er en let og afhængighedsfri måde at trække træningsdata ind i en maskinlæringspipeline.

Ja. GitHub Copilot fuldfører automatisk almindelige urllib-mønstre såsom urlopen()-kald, Request-objekter og try/except-fejlhåndtering. Det fremskynder standardteksten, men du bør stadig verificere URLs, headere og undtagelseshåndtering, som AI-assistenten foreslår.

Indkod dine parametre med urllib.parse.urlencode(), konverter dem til bytes med encode(), og send dem derefter som dataargumentet til urlopen() eller et Request-objekt. Angivelse af data får automatisk urllib til at sende en POST i stedet for en GET-anmodning.

Opsummer dette indlæg med: