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 часа" />
Так разными запросами мы можем вытягивать информацию, которая нам нужна.