Рубрики
Без рубрики

Python Urllib – Python 3 Urllib

Python Urllib, Python 3 Urllib, Python Urllib запрос, Python Urllib Пример, Python Urllib Получить запрос на почту, Python Urllib Отправить заголовок запроса, получить заголовок ответа, Python Urllib URLENCODE, Python Urllib Parse кодирует данные ASCII

Автор оригинала: Pankaj Kumar.

Модуль Python Urllib позволяет нам программно получать доступ к данным URL.

Python Urllib

  • Мы можем использовать Python Urllib для получения контента сайта в программе Python.
  • Мы также можем использовать его, чтобы позвонить на веб-сервисы отдыха.
  • Мы можем сделать Get и Post HTTP-запросы.
  • Этот модуль позволяет нам сделать HTTP, а также запросы HTTPS.
  • Мы можем отправлять заголовки запроса, а также получить информацию о заголовках ответа.

Python Urllib Получить пример

Начнем с простого примера, где мы будем читать содержимое домашней страницы Wikipedia.

import urllib.request

response = urllib.request.urlopen('https://www.wikipedia.org')

print(response.read())

Ответ Читать () Метод возвращает байтовый массив. Приведенный выше код будет распечатать данные HTML, возвращаемые домашней страницей Wikipedia. Это не будет в читаемом формате человека, но мы можем использовать некоторые HTML Parser извлечь полезную информацию от нее.

Python Urllib запрос с заголовком

Посмотрим, что произойдет, когда мы стараемся запустить вышеуказанную программу для JouroneDev.

import urllib.request

response = urllib.request.urlopen('https://www.journaldev.com')

print(response.read())

Мы получим ниже сообщение об ошибке.

/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Users/pankaj/Documents/PycharmProjects/BasicPython/urllib/urllib_example.py
Traceback (most recent call last):
  File "/Users/pankaj/Documents/PycharmProjects/BasicPython/urllib/urllib_example.py", line 3, in 
    response = urllib.request.urlopen('https://www.journaldev.com')
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 532, in open
    response = meth(req, response)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 642, in http_response
    'http', request, response, code, msg, hdrs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 570, in error
    return self._call_chain(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain
    result = func(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 650, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

Это потому, что мой сервер не позволяет программному доступу к данным веб-сайта, потому что он предназначен для браузеров, которые могут анализировать данные HTML. Обычно мы можем преодолеть эту ошибку, отправив Пользовательский агент Заголовок по запросу. Давайте посмотрим на модифицированную программу для этого.

import urllib.request

# Request with Header Data to send User-Agent header
url = 'https://www.journaldev.com'

headers = {}
headers['User-Agent'] = 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.27 Safari/537.17'

request = urllib.request.Request(url, headers=headers)
resp = urllib.request.urlopen(request)

print(resp.read())

Мы создаем заголовки запроса с помощью словаря, а затем отправляя его в запрос. Вышеуказанная программа напечатает данные HTML, полученные от домашней страницы JournalDev.

Пример отдыха на Python Urllib

Веб-сервисы REST доступны по протоколам HTTP, поэтому мы можем легко получить доступ к ним с помощью модуля Urllib. У меня есть простая веб-служба для отдыха на основе JSON, работающая на моем локальном компьютере, созданном с помощью JSON Server. Это отличный модуль узла для запуска веб-сервисов Dummy Json Read для целей тестирования.

import urllib.request

response = urllib.request.urlopen('https://localhost:3000/employees')

print(response.read())

Обратите внимание, что выход консоли печатает данные JSON.

Заголовки ответа на ответ Python Urllib

Мы можем получить заголовки ответа, позвонив Информация () Функция на объекте ответа. Это возвращает словарь, поэтому мы также можем извлечь конкретные данные заголовка от ответа.

import urllib.request

response = urllib.request.urlopen('https://localhost:3000/employees')

print(response.info())

print('Response Content Type is = ', response.info()["content-type"])

Выход:

X-Powered-By: Express
Vary: Origin, Accept-Encoding
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
X-Content-Type-Options: nosniff
Content-Type: application/json; charset=utf-8
Content-Length: 260
ETag: W/"104-LQla2Z3Cx7OedNGjbuVMiKaVNXk"
Date: Wed, 09 May 2018 19:26:20 GMT
Connection: close


Response Content Type is =  application/json; charset=utf-8

Python Urllib Post.

Давайте посмотрим на пример для вызова последующего метода.

import urllib.request
import urllib.parse

post_url = 'https://localhost:3000/employees'

headers = {}
headers['Content-Type'] = 'application/json'

# POST request encoded data
post_data = urllib.parse.urlencode({'name' : 'David', 'salary'  : '9988'}).encode('ascii')

#Automatically calls POST method because request has data
post_response = urllib.request.urlopen(url=post_url, data=post_data)

print(post_response.read())

Когда мы называем Urlopen Функция, если запрос имеет данные Затем он автоматически использует Пост HTTP-метод. Ниже приведены изображение, показывает вывод вышеописанного вызова для моей демо службы.

Ссылка: API док