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.

  • 🔘 Standardní knihovna: urllib je dodáván s Python a sdružuje moduly request, error, parse a robotparser pro URL úkoly.
  • ☑️ Otevření URL: Funkce urllib.request.urlopen() otevře spojení a getcode() vrátí stav HTTP, například 200.
  • (Tj. Přečtěte si odpověď: Metoda read() vrací nezpracované bajty, které metoda decode(„utf-8“) převede na čitelný text.
  • 🧪 Zpracování chyb: Zachyťte HTTPError a URLChyba z urllib.error, takže neúspěšné požadavky nikdy nezpůsobí pád programu.
  • 🛠️ Stáhnout soubory: Funkce urlretrieve() ukládá veškeré URL přímo na disk, ideální pro obrázky, PDF a datové sady.
  • 🤖 Připraveno pro umělou inteligenci: urllib načítá datové sady a data API, která zásobují modely strojového učení a kanály umělé inteligence.

Python Přístup k internetu pomocí URLlib

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

Otevřená URL pomocí URLlibu

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

HTML soubor z URL in Python

  • 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í.

Nejčastější dotazy

Urlopen() vrací objekt odpovědi HTTP, obvykle http.client.HTTPResponse. Voláte read() pro získání nezpracovaných bajtů, getcode() pro čtení stavového kódu a hlavičky nebo info() pro kontrolu metadat, jako je typ obsahu a délka.

Soubor urllib2 patřil Python 2. V Python 3 byla reorganizována: její funkce byly rozděleny do souboru urllib.request pro otevření URLs a urllib.error pro výjimky. Code Soubor napsaný pro urllib2 musí být aktualizován tak, aby místo toho importoval urllib.request.

Funkce read() vrací bajty, nikoli řetězec, protože urlopen() předem nezná kódování. Volání funkce decode(„utf-8“) převede tyto bajty na čitelný text, abyste mohli vytisknout, prohledat nebo analyzovat obsah HTML nebo JSON.

Otevřete URL Pomocí urlopen() přečtěte bajty, dekódujte je a poté je parsujte pomocí modulu JSON: json.loads(response.read().decode(“utf-8”)). Toto vrátí Python slovník nebo seznam, který můžete použít přímo, což je běžné při volání webových API.

Zabalte URL v objektu urllib.request.Request a před jeho otevřením přidejte hlavičku: request.add_header(“User-Agent”, “Mozilla/5.0”) a poté předejte požadavek funkci urlopen(). Vlastní hlavičky pomáhají, když server blokuje výchozí Python uživatelský agent.

Ano. urllib dokáže načítat datové sady, soubory CSV a JSON z webových API, které pak dekódujete a načtete do PANDAS nebo NumPy. Je to lehký a závislý způsob, jak načíst trénovací data do procesu strojového učení.

Ano. GitHub Copilot automaticky dokončuje běžné vzory urllib, jako jsou volání urlopen(), objekty Request a zpracování chyb try/except. Zrychluje to boilerplate, ale i tak byste měli ověřit... URLs, hlavičky a zpracování výjimek, které navrhuje asistent umělé inteligence.

Zakódujte své parametry pomocí urllib.parse.urlencode(), převeďte je na bajty pomocí encode() a poté je předejte jako argument data objektu urlopen() nebo Request. Zadání dat automaticky způsobí, že urllib odešle požadavek POST místo požadavku GET.

Shrňte tento příspěvek takto: