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.

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


