HTPP и сетевые запросы
https://yandex.ru/search/?text=что%20такое%20backend&lr=213
%20 - заменяет пробел т.к. в HTPP нет пробелов
Чтобы отправить правильный запрос можно использовать следующий код:
user_query = 'как стать бэкенд-разработчиком'
url = 'https://yandex.ru/search/?text='
user_query_str=user_query.split(' ') # разбиваем текст по пробелу
url2='%20'.join(user_query_str) # объединяем текс по %20
print(f'{url}{url2}')
# результат:
https://yandex.ru/search/?text=как%20стать%20бэкенд-разработчикомВопросы с кириллицей
Браузер автоматически перекодирует другие языки в латиницу. В ручную это можно сделать при помощи библиотеки import urllib.parse
import urllib.parse
strings = [
'что такое backend',
'Привет!',
' ', # просто пробел
'letiště', # аэропорт по-чешски
'München', # крупнейший город Баварии
'Champs-Élysées', # Елисейские поля
'東京', # а это Токио, столица Японии :)
]
for s in strings:
encoded = urllib.parse.quote(s) # зашифрованная строка
decoded = urllib.parse.unquote(encoded) # расшифрованная обратно строка
print(decoded, '-', encoded)
что такое backend - %D1%87%D1%82%D0%BE%20%D1%82%D0%B0%D0%BA%D0%BE%D0%B5%20backend
Привет! - %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%21
- %20
letiště - leti%C5%A1t%C4%9B
München - M%C3%BCnchen
Champs-Élysées - Champs-%C3%89lys%C3%A9es
東京 - %E6%9D%B1%E4%BA%AC import urllib.parse
url = 'https://yandex.ru/search/?text=%D0%BA%D0%B0%D0%BA%20%D0%B1%D0%B5%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D0%BD%D0%BE%20%D0%B5%D0%B7%D0%B4%D0%B8%D1%82%D1%8C%20%D0%BD%D0%B0%20%D1%82%D0%B0%D0%BA%D1%81%D0%B8'
# чтобы вычленить текст вопроса
# разбейте строку по знаку = и возьмите
# второй элемент получившегося списка
# question = # сохраните его в переменной question
# напечатайте на экран запрос в расшифрованном виде
split_query=url.split('=')
decode_query=urllib.parse.unquote(split_query[1])
print(decode_query)Выше пример кода для расшифровки запросов.
-----------------------------------------------------------------------------------------
Запросы через Python
Запрос на сайт можно отправить в обход браузера. Ниже код:
import requests
response = requests.get('https://ya.ru/white')
print(response.text) # печатаем текст запрошенной страницыimport requests url = 'http://wttr.in/?0T' response = requests.get(url) print(response.text)
Если отправлять запрос через Python, то его придется сначала перекодировать, чтобы получилось вот так:
url = 'https://yandex.ru/search/?text=%D1%87%D1%82%D0%BE%20%D1%82%D0%B0%D0%BA%D0%BE%D0%B5%20backend&lr=213'
Однако, это неудобно. Чтобы было легче, существует функция:
response = requests.get(url, params=search_parameters)
import requests
search_parameters = { 'text': 'что такое backend', 'lr': 213 }
url = 'https://yandex.ru/search/'
# Функция get() приняла на вход URL и параметры поиска,
# а дальше она знает, что делать
response = requests.get(url, params=search_parameters)
print(response.status_code)
print(response.url)В параметрах можно указать другие аргументы.
Например,
parameters = { 'u': '', 'T': '' }
u - переводит в формат английской метрической системы
T - возвращает черно-белый режим
import requests
url = 'https://wttr.in' # не изменяйте значение URL
weather_parameters = {
'0': '',
'T': '',
'M': '',
'lang':'ru'
# добавьте параметр запроса `T`, чтобы вернулся чёрно-белый текст
}
response = requests.get(url,params=weather_parameters)
# передайте параметры в http-запрос
print(response.text)Заголовки запросов и ответов
# Headers можно получать из запросов: отправляем запрос response
# и добавляем к нему параметр заголовка:
import requests
response = requests.get('https://ya.ru/white')
# вот мы узнали, что код ответа 200
# и заполучили это число в свой код:
code = response.status_code
print(f'Код ответа = {code}') # а вот мы и заголовки читаем,
# и выводим их форматированной строкой
# с примечанием, каким захочется, на любом языке
headers = response.headers
print(f'Тип содержимого: {headers["content-type"]}')
print(f'Время ответа: {headers["date"]}')Вот чё к нам вернулось: Код ответа = 200 Тип содержимого: text/html; charset=UTF-8 Время ответа: Thu, 13 Jun 2019 15:25:13 GMT
Заголовки можно собрать в словаре и передать в HTTP запросе:
import requests
request_headers = { 'Accept-Language': 'ru'}
# попросим материал на русском языке
# сходим почитать блоги про IT, строкой передаём URL платформы habr
response = requests.get('https://habr.com', headers=request_headers)
print(response.text)<!DOCTYPE html> <html lang="ru" class="no-js"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta content='width=1024' name='viewport'> <title>Лучшие публикации за сутки / Хабр</title> <meta name="description" content="Лучшие публикации за последние 24 часа" />
Так разными запросами мы можем вытягивать информацию, которая нам нужна.