Python Internet-yhteys käyttämällä Urllib.Request ja urlopen()

⚡ Älykäs yhteenveto

urllib on standardi Python moduuli internet-tietojen käyttämiseen ja ohjelmien avaamiseen URLja hakevat HTML-, JSON- tai binäärisisältöä. urllib.request.urlopen()-funktio muodostaa yhteyden verkko-osoitteeseen ja lukee palvelimen vastauksen suoraan Python.

  • 🔘 Vakiokirjasto: urllib toimitetaan mukana Python ja niputtaa request-, error-, parse- ja robotparser-moduulit URL tehtäviä.
  • ☑️ Avoin URL: Funktio urllib.request.urlopen() avaa yhteyden ja getcode() palauttaa HTTP-tilan, kuten 200.
  • Lue vastaus: read()-metodi palauttaa raakatavuja, jotka decode(“utf-8”) muuntaa luettavaan muotoon.
  • 🧪 Käsittele virheet: Catch HTTPError ja URLVirhe urllib.error-tiedostosta, joten epäonnistuneet pyynnöt eivät koskaan kaada ohjelmaa.
  • 🛠️ Lataa tiedostoja: urlretrieve()-funktio tallentaa kaikki URL suoraan levylle, ihanteellinen kuville, PDF-tiedostoille ja datajoukoille.
  • 🤖 Tekoälyvalmis: urllib hakee datajoukkoja ja API-dataa, jotka syöttävät koneoppimismalleja ja tekoälyprosesseja.

Python Internet-yhteys Urllibin avulla

Alla olevat osiot selittävät, mitä urllib on, miten se avataan URL ja lukea sen HTML-koodin, ja miten käsitellä virheitä, ladata tiedostoja ja valita urllib:n ja pyyntökirjaston välillä.

Mikä on urllib?

urllib on a Python moduuli, jota voidaan käyttää avaamiseen URLs. Se määrittelee funktiot ja luokat auttamaan URL toimet.

Kanssa Python, voit myös käyttää ja hakea tietoja internetistä, kuten XML:ää, HTML:ää ja JSON:ia, ja sitten työskennellä näiden tietojen kanssa suoraan. Seuraavissa osioissa näemme, kuinka tietoja haetaan verkosta. Esimerkiksi tässä käytämme Guru99 video URL, käytä sitä käyttämällä Pythonja tulosta tämän HTML-tiedosto URL.

Urllib-paketti ryhmittelee useita moduuleja: urllib.request avaamista varten URLs, urllib.error poikkeuksille, joita pyynnöt voivat aiheuttaa, urllib.parse rakentamiseen ja jäsentämiseen URLs ja urllib.robotparser robots.txt-tiedostojen lukemiseen.

Kuinka avata URL Urllibin käyttäminen

Ennen kuin suoritamme koodin internet-dataan yhdistämiseksi, meidän on tuotava URL kirjastomoduuli eli ”urllib”.

avoin URL Urllibin käyttäminen

  • Tuo urllib
  • Määrittele päätehtäväsi
  • Ilmoita muuttuja webUrl
  • Kutsu sitten urllopen-funktiota urllib-kirjastossa
  • URL avaamme on Guru99 opetusohjelmaa aiheesta YouTube
  • Seuraavaksi tulostamme tuloskoodin
  • Tuloskoodi noudetaan kutsumalla getcode-funktiota luomamme webUrl-muuttujalle.
  • Muunnamme sen merkkijonoksi, jotta se voidaan yhdistää merkkijonoon "tuloskoodi"
  • Tämä on tavallinen HTTP-koodi "200", joka osoittaa, että HTTP-pyyntö on käsitelty onnistuneesti.

HTML-tiedoston hakeminen osoitteesta URL in Python

Voit lukea HTML-tiedoston myös käyttämällä read()-funktiota kohdassa PythonKun suoritat koodin, HTML-tiedosto tulee näkyviin konsoliin.

HTML-tiedosto osoitteesta URL in Python

  • Kutsu read()-funktiota webUrl-muuttujalle
  • read()-metodin avulla voit lukea datatiedostojen sisällön
  • Lue koko sisältö URL muuttujaan nimeltä data
  • Suorita koodi, niin se tulostaa tiedot HTML-muodossa.

Tässä on täydellinen koodi:

Python 2-esimerkki

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

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

Urllib-virheiden käsittely: URLVirhe ja HTTP-virhe

Pyyntö ei aina onnistu. Kun jokin menee pieleen, urllib aiheuttaa poikkeuksen datan palauttamisen sijaan, joten on tärkeää käsitellä nämä virheet. Urllib.error-moduuli määrittelee kaksi pääpoikkeusluokkaa.

  • HTTP-virhe ilmoitetaan, kun palvelin palauttaa virhekoodin, kuten 404 Not Found tai 500 Internal Server Error. Se sisältää tilakoodin ja vastauksen rungon.
  • URLVirhe ilmestyy, kun palvelimeen ei saada lainkaan yhteyttä, esimerkiksi väärän verkkotunnuksen tai internet-yhteyden puuttumisen vuoksi. Se sisältää reason-attribuutin, joka selittää virheen.

Koska HTTPError on luokka URLVirhe, havaitse HTTPError aina ensin, jotta jokainen virhetyyppi käsitellään erikseen:

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)

Näiden poikkeusten käsittely estää ohjelmasi kaatumisen ja antaa sinun kirjata ongelman, yrittää pyyntöä uudelleen tai palata käyttämään välimuistissa olevia tietoja.

Tiedoston lataaminen laitteelta URL Urllibin käyttäminen

Lukeminen a URL muistiin toimii pienillä sivuilla, mutta kuvien, PDF-dokumenttien tai datajoukkojen kohdalla on helpompaa tallentaa vastaus suoraan levylle. Urllib.request-moduuli tarjoaa kaksi yksinkertaista tapaa tehdä tämä.

urlretrieve()-funktio lataa URL suoraan paikalliseen tiedostoon yhdellä rivillä:

from urllib.request import urlretrieve

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

Saat tarkempia hallintamahdollisuuksia avaamalla URL ja kirjoita tavut itse. Avaa paikallinen tiedosto binääritilassa, koska urlopen() palauttaa tavuja, ei tekstiä:

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

Hyvin suurten tiedostojen kohdalla lue ja kirjoita silmukassa käyttämällä response.read(8192), jotta koko tiedostoa ei koskaan pidetä muistissa kerralla.

urllib vs. pyyntökirjasto Python

urllib on osa Python standardikirjasto, joten se toimii kaikkialla ilman asennusta. Kolmannen osapuolen pyyntökirjastoa ei ole sisäänrakennettu, mutta monet kehittäjät suosivat sitä jokapäiväisessä HTTP-työssä, koska sen syntaksi on lyhyempi ja helpommin luettava.

Tärkeimmät erot ovat:

  • Asennus: urllib toimitetaan mukana Python, kun taas pyynnöt on asennettava pip:n avulla.
  • dekoodaus: urllib palauttaa itse dekoodaamasi raakatavut, kun taas pyynnöt dekoodaavat tekstin ja JSON:n automaattisesti.
  • Mukavuus: pyynnöt käsittelevät istuntoja, evästeitä ja mukautettuja otsikoita vähemmällä koodilla.
  • riippuvuudet: urllib ei lisää mitään, kun taas pyynnöt perustuvat alla olevaan urllib3:een.

Valitse urllib, kun et halua riippuvuuksia tai tarvitset vain nopean, kertaluonteisen pyynnön. Valitse pyynnöt suuremmille projekteille, jotka sisältävät todennusta, istuntoja tai usein API-kutsuja. Molemmat lähettävät samat taustalla olevat HTTP-pyynnöt, joten päätös riippuu kätevyydestä verrattuna pienempään riippuvuusluetteloon.

UKK

urlopen() palauttaa HTTP-vastausobjektin, yleensä http.client.HTTPResponse-funktion. Raa'at tavut haetaan kutsumalla read()-funktiota, tilakoodi luetaan kutsumalla getcode()-funktiota ja metatiedot, kuten sisällön tyyppi ja pituus, tarkistetaan otsikoilla tai info()-funktiolla.

urllib2 kuului Python 2. sisään Python 3 se järjestettiin uudelleen: sen ominaisuudet jaettiin urllib.request-tiedostoon avaamista varten URLs ja urllib.error poikkeuksia varten. Code urllib2:lle kirjoitetut tiedostot on päivitettävä tuomaan urllib.request.

read() palauttaa tavuja, ei merkkijonoa, koska urlopen() ei tiedä koodausta etukäteen. decode(“utf-8”)-kutsu muuntaa nämä tavut luettavaan muotoon, jotta voit tulostaa, hakea tai jäsentää HTML- tai JSON-sisältöä.

Avaa URL urlopen()-funktiolla lue tavut, dekoodaa ne ja jäsennä ne sitten json-moduulilla: json.loads(response.read().decode(“utf-8”)). Tämä palauttaa Python sanakirja tai lista, jota voit käyttää suoraan, mikä on yleistä web-API-rajapintoja kutsuttaessa.

Kääri URL urllib.request.Request-objektissa ja lisää otsikko ennen sen avaamista: request.add_header(“User-Agent”, “Mozilla/5.0”), ja välitä sitten pyyntö urlopen()-funktiolle. Mukautetut otsikot auttavat, kun palvelin estää oletusarvoisen Python käyttäjäagentti.

Kyllä. urllib voi hakea datajoukkoja, CSV-tiedostoja ja JSON-tiedostoja web-rajapinnoista, jotka sitten dekoodataan ja ladataan pandoihin tai NumPyhin. Se on kevyt ja riippuvuusvapaa tapa vetää harjoitusdataa koneoppimisputkeen.

Kyllä. GitHub Copilot täydentää automaattisesti yleisiä urllib-malleja, kuten urlopen()-kutsuja, Request-objekteja ja try/except-virheiden käsittelyä. Se nopeuttaa vakiomuotoista käsittelyä, mutta sinun on silti tarkistettava, että URLs, otsikot ja tekoälyavustaja ehdottaa poikkeusten käsittelyä.

Koodaa parametrisi urllib.parse.urlencode()-funktiolla, muunna ne tavuiksi encode()-funktiolla ja anna ne sitten data-argumenttina urlopen()-funktiolle tai Request-objektille. Datan syöttäminen saa urllib:n automaattisesti lähettämään POST-pyynnön GET-pyynnön sijaan.

Tiivistä tämä viesti seuraavasti: