Python Internettoegang met Urllib.Request en urlopen()

โšก Slimme samenvatting

urllib is de standaard Python module voor toegang tot internetgegevens, waardoor programma's kunnen worden geopend URLDe functie urllib.request.urlopen() maakt verbinding met een webadres en leest het serverantwoord direct in. Python.

  • ๐Ÿ”˜ Standaardbibliotheek: urllib wordt meegeleverd met Python en bundelt de modules request, error, parse en robotparser voor URL taken.
  • โ˜‘๏ธ Open een URL: De functie urllib.request.urlopen() opent een verbinding en getcode() retourneert de HTTP-status, bijvoorbeeld 200.
  • โœ… Lees het antwoord: De read()-methode retourneert onbewerkte bytes, die decode(โ€œutf-8โ€) omzet in leesbare tekst.
  • ๐Ÿงช Fouten verwerken: Vang HTTPError op en URLFoutmelding van urllib.error, waardoor mislukte verzoeken het programma nooit laten vastlopen.
  • ๏ธ Download bestanden: De functie urlretrieve() slaat alles op. URL Direct naar de schijf, ideaal voor afbeeldingen, PDF's en datasets.
  • ๐Ÿค– AI-klaar: Urllib haalt datasets en API-gegevens op die gebruikt worden door machine learning-modellen en AI-pipelines.

Python Internettoegang via Urllib

De onderstaande secties leggen uit wat urllib is en hoe je een bestand opent. URL en de HTML ervan lezen, en hoe om te gaan met fouten, bestanden te downloaden en te kiezen tussen urllib en de requests-bibliotheek.

Wat is urllib?

urllib is een Python module die gebruikt kan worden voor het openen URLHet definieert functies en klassen om daarbij te helpen. URL acties.

Met PythonJe kunt ook gegevens van het internet ophalen, zoals XML, HTML en JSON, en vervolgens direct met deze gegevens werken. In de volgende paragrafen zullen we zien hoe je gegevens van het web kunt ophalen. We gebruiken hier bijvoorbeeld een Guru99 video URL, er toegang toe krijgen via Pythonen print het HTML-bestand hiervan URL.

Het urllib-pakket groepeert verschillende modules: urllib.request voor het openen van URLs, urllib.error voor de uitzonderingen die verzoeken kunnen veroorzaken, urllib.parse voor het bouwen en parsen URLs, en urllib.robotparser voor het lezen van robots.txt-bestanden.

Hoe te openen URL Urllib gebruiken

Voordat we de code uitvoeren om verbinding te maken met internetdata, moeten we de volgende pakketten importeren: URL bibliotheekmodule, ofwel "urllib".

Open URL Urllib gebruiken

  • URLlib importeren
  • Definieer uw hoofdfunctie
  • Declareer de variabele webUrl
  • Roep vervolgens de urlopen-functie aan in de urllib-bibliotheek.
  • De URL We openen binnenkort de Guru99 handleidingen over YouTube
  • Vervolgens printen we de resultaatcode.
  • De resultaatcode wordt opgehaald door de functie `getcode` aan te roepen op de variabele `webUrl` die we hebben aangemaakt.
  • We zetten dat om naar een tekenreeks, zodat die kan worden samengevoegd met onze tekenreeks "resultaatcode".
  • Dit is een standaard HTTP-code "200", wat aangeeft dat het HTTP-verzoek succesvol is verwerkt.

Hoe krijg je een HTML-bestand van een URL in Python

Je kunt het HTML-bestand ook lezen met behulp van de functie `read()` in PythonWanneer je de code uitvoert, verschijnt het HTML-bestand in de console.

HTML-bestand van URL in Python

  • Roep de functie `read()` aan op de variabele `webUrl`.
  • Met de `read()`-methode kunt u de inhoud van gegevensbestanden lezen.
  • Lees de volledige inhoud van de URL in een variabele genaamd data
  • Voer de code uit en de gegevens worden in HTML-formaat weergegeven.

Hier is de volledige code:

Python 2 Voorbeeld

#  
# 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 Voorbeeld

#
# 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)

Hoe om te gaan met urllib-fouten: URLFout en HTTPError

Een verzoek slaagt niet altijd. Wanneer er iets misgaat, genereert urllib een uitzondering in plaats van gegevens terug te geven. Het is daarom belangrijk om deze fouten af โ€‹โ€‹te handelen. De module urllib.error definieert twee belangrijke uitzonderingsklassen.

  • HTTP-fout Deze melding wordt gegenereerd wanneer de server een foutstatuscode retourneert, zoals 404 Not Found of 500 Internal Server Error. De melding bevat de statuscode en de inhoud van het antwoord.
  • URLFout Deze foutmelding wordt gegenereerd wanneer de server helemaal niet bereikbaar is, bijvoorbeeld vanwege een onjuiste domeinnaam of een ontbrekende internetverbinding. De foutmelding bevat een attribuut met een reden die de oorzaak van de fout verklaart.

Omdat HTTPError een subklasse is van URLFout, vang altijd eerst HTTPError op, zodat elk fouttype afzonderlijk wordt afgehandeld:

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)

Door deze uitzonderingen af โ€‹โ€‹te handelen, voorkomt u dat uw programma vastloopt en kunt u het probleem registreren, het verzoek opnieuw proberen of terugvallen op gegevens uit de cache.

Hoe download je een bestand van een URL Met behulp van urllib

Een lezen URL In het geheugen opslaan werkt prima voor kleine pagina's, maar voor afbeeldingen, PDF-documenten of datasets is het eenvoudiger om het antwoord direct op de schijf op te slaan. De module urllib.request biedt twee eenvoudige manieren om dit te doen.

De functie urlretrieve() downloadt een URL rechtstreeks naar een lokaal bestand in รฉรฉn regel:

from urllib.request import urlretrieve

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

Voor meer controle, open de URL en schrijf de bytes zelf. Open het lokale bestand in binaire modus, want urlopen() retourneert bytes, geen 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())

Voor zeer grote bestanden kunt u het lezen en schrijven in een lus uitvoeren met behulp van response.read(8192), zodat het hele bestand nooit tegelijk in het geheugen wordt vastgehouden.

urllib versus de requests-bibliotheek in Python

urllib maakt deel uit van de Python Het is een standaardbibliotheek, dus het werkt overal zonder installatie. De externe requests-bibliotheek is niet ingebouwd, maar veel ontwikkelaars geven er de voorkeur aan voor dagelijkse HTTP-toepassingen omdat de syntaxis korter en leesbaarder is.

De belangrijkste verschillen zijn:

  • Installatie: urllib wordt meegeleverd met Python, terwijl requests met pip geรฏnstalleerd moet worden.
  • Decodering: urllib retourneert onbewerkte bytes die je zelf moet decoderen, terwijl requests tekst en JSON automatisch decodeert.
  • Gemak: De `requests`-module verwerkt sessies, cookies en aangepaste headers met minder code.
  • Bijgebouwen: urllib voegt niets toe, terwijl requests eronder afhankelijk is van urllib3.

Kies urllib als je geen afhankelijkheden wilt of alleen een snelle, eenmalige aanvraag nodig hebt. Kies requests voor grotere projecten met authenticatie, sessies of frequente API-aanroepen. Beide versturen dezelfde onderliggende HTTP-aanvragen, dus de keuze komt neer op gebruiksgemak versus een kleinere lijst met afhankelijkheden.

Veelgestelde vragen

urlopen() retourneert een HTTP-antwoordobject, meestal een http.client.HTTPResponse. Je roept read() aan om de ruwe bytes te verkrijgen, getcode() om de statuscode te lezen en headers of info() om metadata zoals contenttype en lengte te inspecteren.

urllib2 behoorde tot Python 2. in Python 3. Het werd gereorganiseerd: de functies werden opgesplitst in urllib.request voor opening. URLs en urllib.error voor uitzonderingen. Code De code die voor urllib2 is geschreven, moet worden bijgewerkt om in plaats daarvan urllib.request te importeren.

`read()` retourneert bytes, geen tekenreeks, omdat `urlopen()` de codering niet van tevoren weet. Door `decode("utf-8")` aan te roepen, worden die bytes omgezet in leesbare tekst, zodat je de HTML- of JSON-inhoud kunt afdrukken, doorzoeken of parsen.

Open de URL Met urlopen() worden de bytes gelezen, gedecodeerd en vervolgens geparseerd met de json-module: json.loads(response.read().decode(โ€œutf-8โ€)). Dit retourneert een Python Een woordenboek of lijst die je direct kunt gebruiken, wat gebruikelijk is bij het aanroepen van web-API's.

Wikkel de URL Voeg de header toe aan een `urllib.request.Request` object voordat je het opent: `request.add_header("User-Agent", "Mozilla/5.0")`, en geef het verzoek vervolgens door aan `urlopen()`. Aangepaste headers zijn handig wanneer een server de standaardheader blokkeert. Python gebruikersagent.

Ja. urllib kan datasets, CSV-bestanden en JSON ophalen van web-API's, die je vervolgens decodeert en in pandas of NumPy laadt. Het is een lichtgewicht, onafhankelijke manier om trainingsdata in een machine learning-pipeline te importeren.

Ja. GitHub Copilot vult automatisch veelvoorkomende urllib-patronen aan, zoals urlopen()-aanroepen, Request-objecten en try/except-foutafhandeling. Het versnelt het schrijven van standaardcode, maar je moet het nog steeds controleren. URLs, headers en foutafhandeling die de AI-assistent voorstelt.

Codeer je parameters met urllib.parse.urlencode(), converteer ze naar bytes met encode() en geef ze vervolgens door als het data-argument aan urlopen() of een Request-object. Door data mee te geven, verstuurt urllib automatisch een POST-verzoek in plaats van een GET-verzoek.

Vat dit bericht samen met: