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.

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


