Python Достъп до Интернет чрез Urllib.Request и urlopen()

⚡ Умно обобщение

urllib е стандартът Python модул за достъп до интернет данни, позволяващ отварянето на програми URLи извлича HTML, JSON или двоично съдържание. Функцията urllib.request.urlopen() се свързва с уеб адрес и чете отговора на сървъра директно в Python.

  • 🔘 Стандартна библиотека: urllib се доставя с Python и обединява модулите за заявка, грешка, парсиране и роботпарсиране за URL задачи.
  • ☑️ Отворете URL: Функцията urllib.request.urlopen() отваря връзка, а getcode() връща HTTP статус, например 200.
  • Прочетете отговора: Методът read() връща сурови байтове, които decode(“utf-8”) преобразува в четлив текст.
  • 🧪 Грешки при обработка: Хванете HTTPError и URLГрешка от urllib.error, така че неуспешните заявки никога не сриват програмата.
  • 🛠️ Изтегляне на файлове: Функцията urlretrieve() запазва всички URL директно на диск, идеално за изображения, PDF файлове и набори от данни.
  • 🤖 Готов за изкуствен интелект: urllib извлича набори от данни и API данни, които захранват модели за машинно обучение и AI канали.

Python Достъп до интернет чрез Urllib

Разделите по-долу обясняват какво е urllib, как да отворите URL и да прочетете HTML кода му, както и как да се справяте с грешки, да изтегляте файлове и да избирате между urllib и библиотеката за заявки.

Какво е urllib?

urllib е a Python модул, който може да се използва за отваряне URLс. Той дефинира функции и класове, които помагат в URL действия.

с Python, можете също да осъществявате достъп и да извличате данни от интернет, като XML, HTML и JSON, и след това да работите директно с тези данни. В разделите по-долу ще видим как да извличаме данни от мрежата. Например, тук използваме Guru99 видео URL, достъп до него чрез Pythonи отпечатайте HTML файла на това URL.

Пакетът urllib групира няколко модула: urllib.request за отваряне URLs, urllib.error за изключенията, които заявките могат да генерират, urllib.parse за изграждане и парсиране URLs и urllib.robotparser за четене на robots.txt файлове.

Как да отворите URL използване на Urllib

Преди да изпълним кода за свързване с интернет данни, трябва да импортираме URL библиотечен модул или „urllib“.

отворено URL използване на Urllib

  • Импортиране на urllib
  • Определете вашата основна функция
  • Декларирайте променливата webUrl
  • След това извикайте функцията urlopen в библиотеката urllib
  • - URL отваряме е Guru99 урок по YouTube
  • След това отпечатваме кода на резултата
  • Резултатният код се извлича чрез извикване на функцията getcode на променливата webUrl, която сме създали.
  • Преобразуваме това в низ, така че да може да се свърже с нашия низ „резултатен код“.
  • Това ще бъде обикновен HTTP код „200“, което показва, че HTTP заявката е обработена успешно.

Как да получите HTML файл от URL in Python

Можете също да прочетете HTML файла, като използвате функцията read() в PythonКогато изпълните кода, HTML файлът ще се появи в конзолата.

HTML файл от URL in Python

  • Извикайте функцията read() на променливата webUrl
  • Методът read() ви позволява да четете съдържанието на файлове с данни
  • Прочетете цялото съдържание на URL в променлива, наречена данни
  • Изпълнете кода и той ще отпечата данните в HTML формат

Ето пълния код:

Python 2 Пример

#  
# 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 Пример

#
# 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)

Как да се справяме с грешки в urllib: URLГрешка и HTTP грешка

Заявката не винаги е успешна. Когато нещо се обърка, urllib повдига изключение вместо да връща данни, така че е важно да се обработват тези грешки. Модулът urllib.error дефинира два основни класа изключения.

  • HTTP грешка се генерира, когато сървърът върне код за състояние на грешка, като например 404 Не е намерен или 500 Вътрешна грешка на сървъра. Той съдържа кода на състоянието и тялото на отговора.
  • URLгрешка се повдига, когато сървърът изобщо не може да бъде достигнат, например поради грешно име на домейн или липса на интернет връзка. Той съдържа атрибут reason, който обяснява неуспеха.

Тъй като HTTPError е подклас на URLГрешка, винаги първо се улавя HTTPError, така че всеки тип грешка да се обработва отделно:

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)

Обработката на тези изключения предпазва програмата ви от срив и ви позволява да регистрирате проблема, да опитате отново заявката или да се върнете към кеширани данни.

Как да изтеглите файл от URL Използване на urllib

Четене на a URL Записването в паметта работи за малки страници, но за изображения, PDF документи или набори от данни е по-лесно отговорът да се запише директно на диск. Модулът urllib.request предлага два прости начина за това.

Функцията urlretrieve() изтегля URL директно към локален файл в един ред:

from urllib.request import urlretrieve

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

За по-голям контрол отворете URL и сами запишете байтовете. Отворете локалния файл в двоичен режим, защото urlopen() връща байтове, а не текст:

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())

За много големи файлове, четенето и записването се извършват в цикъл, използвайки response.read(8192), така че целият файл никога да не се съхранява в паметта наведнъж.

urllib срещу библиотеката за заявки в Python

urllib е част от Python стандартна библиотека, така че работи навсякъде без инсталация. Библиотеката за заявки от трети страни не е вградена, но много разработчици я предпочитат за ежедневна HTTP работа, защото синтаксисът ѝ е по-кратък и по-четлив.

Основните разлики са:

  • Монтаж: urllib се доставя с Python, докато заявките трябва да бъдат инсталирани с pip.
  • Декодирането: urllib връща сурови байтове, които декодирате сами, докато requests декодира текст и JSON автоматично.
  • Удобство: Заявките обработват сесии, бисквитки и персонализирани заглавки с по-малко код.
  • Зависимости: urllib не добавя нищо, докато requests разчита на urllib3 отдолу.

Изберете urllib, когато искате нулеви зависимости или се нуждаете само от бърза, еднократна заявка. Изберете заявки за по-големи проекти, които включват удостоверяване, сесии или чести API извиквания. И двете изпращат едни и същи HTTP заявки, така че решението се свежда до удобство спрямо по-малък списък със зависимости.

Въпроси и Отговори

urlopen() връща HTTP обект за отговор, обикновено http.client.HTTPResponse. Извиквате read(), за да получите суровите байтове, getcode(), за да прочетете кода на състоянието, и headers или info(), за да проверите метаданни, като например тип съдържание и дължина.

urllib2 принадлежеше на Python 2. В Python 3 беше реорганизиран: функциите му бяха разделени на urllib.request за отваряне URLs и urllib.error за изключения. Code написаното за urllib2 трябва да се актуализира, за да импортира urllib.request вместо това.

read() връща байтове, а не низ, защото urlopen() не знае предварително кодирането. Извикването на decode(“utf-8”) преобразува тези байтове в четлив текст, така че можете да отпечатате, търсите или анализирате HTML или JSON съдържанието.

Отворете URL с urlopen(), прочетете байтовете, декодирайте ги и след това ги анализирайте с json модула: json.loads(response.read().decode(“utf-8”)). Това връща Python речник или списък, които можете да използвате директно, което е често срещано при извикване на уеб API.

Увийте URL в обект urllib.request.Request и добавете заглавката преди отварянето ѝ: request.add_header(“User-Agent”, “Mozilla/5.0”), след което предайте заявката на urlopen(). Персонализираните заглавки помагат, когато сървър блокира заглавката по подразбиране Python потребителски агент.

Да. urllib може да извлича набори от данни, CSV файлове и JSON от уеб API, които след това декодирате и зареждате в pandas или NumPy. Това е лек, без зависимости начин за извличане на данни за обучение в конвейер за машинно обучение.

Да. GitHub Copilot автоматично довършва често срещани urllib шаблони, като например urlopen(), Request обекти и обработка на грешки try/except. Това ускорява boilerplate, но все пак трябва да проверите URLs, заглавки и обработка на изключения, предлагани от асистента с изкуствен интелект.

Кодирайте параметрите си с urllib.parse.urlencode(), конвертирайте ги в байтове с encode() и след това ги предайте като аргумент данни на urlopen() или обект Request. Предоставянето на данни автоматично кара urllib да изпрати POST вместо GET заявка.

Обобщете тази публикация с: