Python Přístup k internetu pomocí Urllib.Request a urlopen()
⚡ Chytré shrnutí
urllib je standard Python modul pro přístup k internetovým datům, umožňující spouštění programů URLa načíst HTML, JSON nebo binární obsah. Funkce urllib.request.urlopen() se připojuje k webové adrese a čte odpověď serveru přímo do Python.

Níže uvedené části vysvětlují, co je urllib, jak otevřít URL a přečíst si jeho HTML kód a jak ošetřovat chyby, stahovat soubory a volit mezi knihovnou urllib a requests.
Co je urllib?
urllib je a Python modul, který lze použít k otevírání URLs. Definuje funkce a třídy, které pomáhají s URL akce.
S Python, můžete také přistupovat k datům z internetu, jako je XML, HTML a JSON, a načítat je z nich, a poté s těmito daty přímo pracovat. V následujících částech si ukážeme, jak načítat data z webu. Například zde používáme Guru99 videa URL, přístup k němu pomocí Pythona vytiskněte HTML soubor tohoto URL.
Balíček urllib seskupuje několik modulů: urllib.request pro otevření URLs, urllib.error pro výjimky, které mohou požadavky vyvolat, urllib.parse pro sestavení a parsování URLs a urllib.robotparser pro čtení souborů robots.txt.
Jak otevřít URL pomocí URLlibu
Než spustíme kód pro připojení k internetovým datům, musíme importovat URL knihovní modul neboli „urllib“.
- Importovat urllib
- Definujte svou hlavní funkci
- Deklarujte proměnnou webUrl
- Pak zavolejte funkci urlopen v knihovně urllib
- Jedno URL otevíráme, je to Guru99 tutoriálů na téma YouTube
- Dále vypíšeme výsledný kód
- Výsledný kód se načte voláním funkce getcode na proměnné webUrl, kterou jsme vytvořili.
- Převedeme to na řetězec, aby se dal zřetězit s naším řetězcem „výsledkový kód“.
- Toto bude běžný kód HTTP „200“, což znamená, že požadavek HTTP byl úspěšně zpracován.
Jak získat HTML soubor z URL in Python
HTML soubor si můžete také přečíst pomocí funkce read() v PythonPo spuštění kódu se v konzoli zobrazí soubor HTML.
- Zavolejte funkci read() na proměnné webUrl
- Metoda read() umožňuje číst obsah datových souborů
- Přečtěte si celý obsah URL do proměnné s názvem data
- Spusťte kód a ten vypíše data ve formátu HTML.
Zde je úplný kód:
Python 2 Příklad
# # 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 Příklad
# # 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)
Jak zpracovat chyby urllib: URLChyba a HTTPError
Požadavek ne vždy proběhne úspěšně. Když se něco pokazí, urllib vyvolá výjimku místo vrácení dat, takže je důležité tyto chyby ošetřit. Modul urllib.error definuje dvě hlavní třídy výjimek.
- Chyba HTTP se vyvolá, když server vrátí chybový kód, například 404 Nenalezen nebo 500 Interní chyba serveru. Obsahuje stavový kód a tělo odpovědi.
- URLChyba se vyvolá, když server není vůbec dostupný, například kvůli nesprávnému názvu domény nebo chybějícímu připojení k internetu. Obsahuje atribut reason, který vysvětluje selhání.
Protože HTTPError je podtřídou třídy URLChyba, vždy nejprve zachyťte HTTPError, aby se každý typ chyby zpracovával samostatně:
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)
Ošetření těchto výjimek zabraňuje pádu programu a umožňuje vám zaznamenat problém, zopakovat požadavek nebo se vrátit k datům uloženým v mezipaměti.
Jak stáhnout soubor z URL Používání urllib
Čtení a URL Ukládání do paměti funguje pro malé stránky, ale pro obrázky, PDF dokumenty nebo datové sady je snazší uložit odpověď přímo na disk. Modul urllib.request nabízí dva jednoduché způsoby, jak toho dosáhnout.
Funkce urlretrieve() stáhne URL přímo do lokálního souboru v jednom řádku:
from urllib.request import urlretrieve urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")
Pro větší kontrolu otevřete URL a bajty si zapište sami. Otevřete lokální soubor v binárním režimu, protože urlopen() vrací bajty, nikoli text:
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())
U velmi velkých souborů čtěte a zapisujte ve smyčce pomocí response.read(8192), aby se celý soubor nikdy neukládal do paměti najednou.
urllib vs. knihovna requests v Python
urllib je součástí Python standardní knihovna, takže funguje všude bez instalace. Knihovna požadavků třetích stran není integrovaná, ale mnoho vývojářů ji preferuje pro každodenní práci s HTTP, protože její syntaxe je kratší a čitelnější.
Hlavní rozdíly jsou:
- Instalace: urllib je dodáván s Python, zatímco požadavky musí být nainstalovány pomocí pipu.
- Dekódování: urllib vrací nezpracované bajty, které si sami dekódujete, zatímco requests dekóduje text a JSON automaticky.
- Pohodlí: requests zpracovává relace, soubory cookie a vlastní hlavičky s menším množstvím kódu.
- Závislosti: urllib nic nepřidává, zatímco requests se spoléhá na urllib3 pod ním.
Zvolte urllib, pokud chcete žádné závislosti nebo potřebujete pouze rychlý, jednorázový požadavek. Požadavky volte pro větší projekty, které zahrnují ověřování, relace nebo častá volání API. Oba odesílají stejné podkladové HTTP požadavky, takže rozhodnutí závisí na pohodlí oproti menšímu seznamu závislostí.


