Python Dostęp do Internetu za pomocą Urllib.Request i urlopen()

⚡ Inteligentne podsumowanie

urllib jest standardem Python moduł umożliwiający dostęp do danych internetowych, umożliwiający otwieranie programów URLi pobierać zawartość HTML, JSON lub binarną. Funkcja urllib.request.urlopen() łączy się z adresem internetowym i odczytuje odpowiedź serwera bezpośrednio do Python.

  • 🔘 Biblioteka standardowa: urllib jest dostarczany z Python i łączy moduły żądania, błędu, analizy i robota parsera URL zadania.
  • Otwarte URL: Funkcja urllib.request.urlopen() otwiera połączenie, a getcode() zwraca stan HTTP, np. 200.
  • Przeczytaj odpowiedź: Metoda read() zwraca surowe bajty, które następnie są konwertowane przy użyciu dekodowania („utf-8”) na czytelny tekst.
  • 🧪 Obsługa błędów: Złap HTTPError i URLBłąd urllib.error, dzięki któremu nieudane żądania nigdy nie powodują awarii programu.
  • 🛠️. Pobierz pliki: Funkcja urlretrieve() zapisuje dowolne URL bezpośrednio na dysk, idealne rozwiązanie w przypadku obrazów, plików PDF i zestawów danych.
  • 🤖 Gotowy na sztuczną inteligencję: urllib pobiera zestawy danych i dane API, które zasilają modele uczenia maszynowego i potoki sztucznej inteligencji.

Python Dostęp do Internetu za pomocą Urllib

Poniższe sekcje wyjaśniają, czym jest urllib, jak otworzyć URL i przeczytać jego kod HTML, dowiedzieć się, jak obsługiwać błędy, pobierać pliki i wybierać między biblioteką urllib i biblioteką request.

Co to jest urllib?

urllib jest Python moduł, który można wykorzystać do otwierania URLs. Definiuje funkcje i klasy, które pomagają w URL działania.

Z PythonMożesz również uzyskać dostęp do danych z internetu, takich jak XML, HTML i JSON, i pobierać je, a następnie bezpośrednio z nich korzystać. W poniższych sekcjach pokażemy, jak pobierać dane z internetu. Na przykład tutaj używamy Guru99 wideo URL, uzyskaj do niego dostęp za pomocą Pythoni wydrukuj plik HTML tego URL.

Pakiet urllib grupuje kilka modułów: urllib.request do otwierania URLs, urllib.error dla wyjątków, które mogą zostać wygenerowane przez żądania, urllib.parse do budowania i parsowania URLs oraz urllib.robotparser do odczytu plików robots.txt.

Jak otworzyć URL korzystanie z Urllib

Zanim uruchomimy kod łączący się z danymi internetowymi, musimy zaimportować URL moduł biblioteczny, czyli „urllib”.

Otwarte URL korzystanie z Urllib

  • Zaimportuj urllib
  • Zdefiniuj swoją główną funkcję
  • Zadeklaruj zmienną webUrl
  • Następnie wywołaj funkcję urlopen w bibliotece urllib
  • URL otwieramy to jest Guru99 samouczek na temat YouTube
  • Następnie drukujemy kod wyniku
  • Kod wyniku jest pobierany poprzez wywołanie funkcji getcode na zmiennej webUrl, którą utworzyliśmy
  • Konwertujemy to na ciąg znaków, aby można go było połączyć z naszym ciągiem znaków „kod wyniku”
  • Będzie to standardowy kod HTTP „200”, wskazujący, że żądanie HTTP zostało pomyślnie przetworzone

Jak uzyskać plik HTML z URL in Python

Plik HTML można również odczytać za pomocą funkcji read() w PythonPo uruchomieniu kodu plik HTML pojawi się w konsoli.

Plik HTML z URL in Python

  • Wywołaj funkcję read() dla zmiennej webUrl
  • Metoda read() umożliwia odczytanie zawartości plików danych
  • Przeczytaj całą treść URL do zmiennej o nazwie dane
  • Uruchom kod, a dane zostaną wydrukowane w formacie HTML

Oto pełny kod:

Python 2 Przykład

#  
# 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 Przykład

#
# 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 radzić sobie z błędami urllib: URLBłąd i błąd HTTP

Żądanie nie zawsze kończy się sukcesem. Gdy coś pójdzie nie tak, urllib zgłasza wyjątek zamiast zwrócić dane, dlatego ważne jest, aby obsługiwać te błędy. Moduł urllib.error definiuje dwie główne klasy wyjątków.

  • Błąd HTTP jest zgłaszany, gdy serwer zwraca kod statusu błędu, taki jak 404 Nie znaleziono lub 500 Wewnętrzny błąd serwera. Zawiera kod statusu i treść odpowiedzi.
  • URLBłąd Występuje, gdy serwer jest w ogóle niedostępny, na przykład z powodu nieprawidłowej nazwy domeny lub braku połączenia internetowego. Zawiera atrybut reason, który wyjaśnia przyczynę awarii.

Ponieważ HTTPError jest podklasą URLBłąd, zawsze najpierw wychwytuj HTTPError, aby każdy typ błędu był obsługiwany osobno:

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)

Obsługa tych wyjątków zapobiega awariom programu i pozwala zarejestrować problem, ponowić żądanie lub powrócić do danych z pamięci podręcznej.

Jak pobrać plik z URL Korzystanie z urllib

Czytanie a URL Funkcja urllib.request działa w przypadku małych stron, ale w przypadku obrazów, dokumentów PDF lub zestawów danych łatwiej jest zapisać odpowiedź bezpośrednio na dysku. Moduł urllib.request oferuje dwa proste sposoby, aby to zrobić.

Funkcja urlretrieve() pobiera URL bezpośrednio do pliku lokalnego w jednym wierszu:

from urllib.request import urlretrieve

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

Aby uzyskać większą kontrolę, otwórz URL i zapisz bajty samodzielnie. Otwórz plik lokalny w trybie binarnym, ponieważ urlopen() zwraca bajty, a nie 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())

W przypadku bardzo dużych plików odczytuj i zapisuj w pętli, korzystając z response.read(8192), dzięki czemu cały plik nigdy nie zostanie zapisany w pamięci na raz.

urllib kontra biblioteka żądań w Python

urllib jest częścią Python Biblioteka standardowa, więc działa wszędzie bez instalacji. Biblioteka żądań stron trzecich nie jest wbudowana, ale wielu programistów preferuje ją do codziennej pracy z HTTP, ponieważ jej składnia jest krótsza i bardziej czytelna.

Główne różnice to:

  • Instalacja: urllib jest dostarczany z Python, podczas gdy żądania muszą być instalowane za pomocą pip.
  • Rozszyfrowanie: urllib zwraca surowe bajty, które możesz samodzielnie zdekodować, podczas gdy requests dekoduje tekst i JSON automatycznie.
  • Wygoda: żądania obsługuje sesje, pliki cookie i niestandardowe nagłówki, wykorzystując mniej kodu.
  • Zależności: urllib nie dodaje niczego, podczas gdy requests opiera się na urllib3.

Wybierz urllib, jeśli chcesz mieć zero zależności lub potrzebujesz tylko szybkiego, jednorazowego żądania. Wybierz żądania dla większych projektów, które obejmują uwierzytelnianie, sesje lub częste wywołania API. Oba wysyłają te same podstawowe żądania HTTP, więc decyzja sprowadza się do wygody, a nie mniejszej listy zależności.

FAQ

Funkcja urlopen() zwraca obiekt odpowiedzi HTTP, zazwyczaj http.client.HTTPResponse. Wywołuje się read(), aby pobrać surowe bajty, getcode(), aby odczytać kod statusu, oraz headers lub info(), aby sprawdzić metadane, takie jak typ zawartości i długość.

urllib2 należał do Python 2. w Python 3 została zreorganizowana: jej funkcje zostały podzielone na urllib.request w celu otwarcia URLs i urllib.error dla wyjątków. Code napisany dla urllib2 musi zostać zaktualizowany tak, aby zamiast tego importował urllib.request.

Funkcja read() zwraca bajty, a nie ciąg znaków, ponieważ urlopen() nie zna z góry kodowania. Wywołanie decode(“utf-8”) konwertuje te bajty na czytelny tekst, umożliwiając drukowanie, wyszukiwanie lub parsowanie zawartości HTML lub JSON.

Otwórz URL za pomocą urlopen() odczytaj bajty, zdekoduj je, a następnie przeanalizuj za pomocą modułu json: json.loads(response.read().decode(“utf-8”)). Zwraca to Python słownik lub lista, z której możesz korzystać bezpośrednio, co jest powszechne podczas wywoływania interfejsów API sieci Web.

Owiń plik URL w obiekcie urllib.request.Request i dodaj nagłówek przed jego otwarciem: request.add_header(“User-Agent”, “Mozilla/5.0”), a następnie przekaż żądanie do urlopen(). Niestandardowe nagłówki pomagają, gdy serwer blokuje domyślny nagłówek. Python agent użytkownika.

Tak. urllib może pobierać zestawy danych, pliki CSV i JSON z internetowych interfejsów API, które następnie dekodujesz i wczytujesz do Pandas lub NumPy. To lekki i niezależny sposób na wczytanie danych treningowych do potoku uczenia maszynowego.

Tak. GitHub Copilot automatycznie uzupełnia typowe wzorce urllib, takie jak wywołania urlopen(), obiekty żądań i obsługa błędów try/except. Przyspiesza to kodowanie szablonowe, ale nadal należy je zweryfikować. URLs, nagłówki i obsługa wyjątków sugerowana przez asystenta AI.

Zakoduj swoje parametry za pomocą urllib.parse.urlencode(), przekonwertuj je na bajty za pomocą encode(), a następnie przekaż je jako argument danych do urlopen() lub obiektu żądania. Podanie danych automatycznie powoduje, że urllib wysyła żądanie POST zamiast GET.

Podsumuj ten post następująco: