Python Pristup internetu pomoću Urllib.Request i urlopen()
⚡ Pametni sažetak
urllib je standard Python modul za pristup internetskim podacima, omogućavanje otvaranja programa URLi dohvaćanje HTML, JSON ili binarnog sadržaja. Funkcija urllib.request.urlopen() povezuje se s web adresom i izravno čita odgovor poslužitelja u Python.

U donjim odjeljcima objašnjeno je što je urllib, kako otvoriti URL i pročitajte njegov HTML, te kako se nositi s greškama, preuzeti datoteke i odabrati između urllib i biblioteke zahtjeva.
Što je urllib?
urllib je a Python modul koji se može koristiti za otvaranje URLs. Definira funkcije i klase koje pomažu u URL radnje.
Kontakt Python, također možete pristupiti i dohvaćati podatke s interneta, kao što su XML, HTML i JSON, a zatim izravno raditi s tim podacima. U odjeljcima u nastavku vidjet ćemo kako dohvaćati podatke s weba. Na primjer, ovdje koristimo Guru99 Video URL, pristupite mu pomoću Pythoni ispišite HTML datoteku ovoga URL.
Paket urllib grupira nekoliko modula: urllib.request za otvaranje URLs, urllib.error za iznimke koje zahtjevi mogu izazvati, urllib.parse za izgradnju i parsiranje URLs i urllib.robotparser za čitanje robots.txt datoteka.
Kako otvoriti URL korištenje Urllib-a
Prije nego što pokrenemo kod za povezivanje s internetskim podacima, moramo uvesti URL modul knjižnice ili „urllib“.
- Uvezi urllib
- Definirajte svoju glavnu funkciju
- Deklarirajte varijablu webUrl
- Zatim pozovite funkciju urlopen u biblioteci urllib
- The URL otvaramo je Guru99 tutorijala o YouTube
- Zatim ispisujemo rezultantni kod
- Rezultatni kod se dohvaća pozivom funkcije getcode na varijabli webUrl koju smo kreirali
- To pretvaramo u niz znakova kako bi se mogao spojiti s našim nizom znakova "kod rezultata".
- Ovo će biti regularni HTTP kod „200“, što ukazuje da je HTTP zahtjev uspješno obrađen
Kako dobiti HTML datoteku iz URL in Python
HTML datoteku možete pročitati i pomoću funkcije read() u PythonKada pokrenete kod, HTML datoteka će se pojaviti u konzoli.
- Pozovite funkciju read() na varijabli webUrl
- Metoda read() omogućuje čitanje sadržaja podatkovnih datoteka
- Pročitajte cijeli sadržaj URL u varijablu pod nazivom podaci
- Pokrenite kod i on će ispisati podatke u HTML formatu
Evo kompletnog koda:
Python 2 Primjer
# # 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 Primjer
# # 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)
Kako riješiti probleme s urllib greškama: URLPogreška i HTTP pogreška
Zahtjev ne uspijeva uvijek. Kada nešto pođe po zlu, urllib podiže iznimku umjesto vraćanja podataka, stoga je važno obraditi te pogreške. Modul urllib.error definira dvije glavne klase iznimaka.
- HTTP pogreška se pokreće kada poslužitelj vrati statusni kod pogreške, kao što je 404 Nije pronađeno ili 500 Internalna pogreška poslužitelja. Sadrži statusni kod i tijelo odgovora.
- URLgreška se aktivira kada poslužitelj uopće nije dostupan, na primjer zbog pogrešnog naziva domene ili nedostatka internetske veze. Sadrži atribut razloga koji objašnjava neuspjeh.
Budući da je HTTPError podklasa od URLGreška, uvijek prvo uhvati HTTPError kako bi se svaka vrsta greške obradila zasebno:
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)
Obrada ovih iznimki sprječava rušenje programa i omogućuje vam evidentiranje problema, ponovni pokušaj zahtjeva ili povratak na predmemorirane podatke.
Kako preuzeti datoteku s URL Korištenje urllib-a
Čitanje a URL Spremanje u memoriju funkcionira za male stranice, ali za slike, PDF dokumente ili skupove podataka lakše je spremiti odgovor izravno na disk. Modul urllib.request nudi dva jednostavna načina za to.
Funkcija urlretrieve() preuzima URL izravno u lokalnu datoteku u jednom retku:
from urllib.request import urlretrieve urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")
Za veću kontrolu otvorite URL i sami zapišite bajtove. Otvorite lokalnu datoteku u binarnom načinu rada jer urlopen() vraća bajtove, a ne 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())
Za vrlo velike datoteke, čitajte i pišite u petlji koristeći response.read(8192) tako da se cijela datoteka nikada ne pohranjuje u memoriji odjednom.
urllib u odnosu na biblioteku zahtjeva u Python
urllib je dio Python standardna biblioteka, tako da radi svugdje bez instalacije. Biblioteka zahtjeva trećih strana nije ugrađena, ali mnogi programeri je preferiraju za svakodnevni HTTP rad jer je njezina sintaksa kraća i čitljivija.
Glavne razlike su:
- Instalacija: urllib se isporučuje s Python, dok zahtjevi moraju biti instalirani pomoću pipa.
- Dekodiranje: urllib vraća sirove bajtove koje sami dekodirate, dok requests automatski dekodira tekst i JSON.
- Praktičnost: zahtjevi obrađuju sesije, kolačiće i prilagođene zaglavlja s manje koda.
- ovisnosti: urllib ne dodaje ništa, dok se zahtjevi oslanjaju na urllib3 ispod.
Odaberite urllib kada ne želite nikakve ovisnosti ili vam je potreban samo brz, jednokratni zahtjev. Odaberite zahtjeve za veće projekte koji uključuju autentifikaciju, sesije ili česte API pozive. Oba šalju iste temeljne HTTP zahtjeve, pa se odluka svodi na praktičnost u odnosu na manji popis ovisnosti.


