Сегодня мы научимся получать информацию из сети интернет. Для начала нам нужно установить несколько модулей, которые предназначены для работы с веб-страницами. В командной строке Windows дадим команды:
pip install requests
pip install html2text
Библиотека(модуль) requests - это наш главный инструмент для взаимодействия с сетью.
Модуль html2text служит для преобразования HTML кода веб-страниц в обычный текст, без наличия в нём HTML тегов.
Установив данные модули, попробуем получить какую-нибудь HTML страницу из интернета.
import requests
s=requests.get('https://m.news.yandex.ru')
print(s.text)
Программа напечатает нам много HTML кода из которого состоит страничка Яндекс новостей.
Но что, если мы хотим получить именно текст сайта, а не эту непонятную мешанину из тегов? Здесь нам поможет html2text. Давайте попробуем получить текст главной страницы нашего сайта golos.io
import requests
import html2text
s=requests.get('https://golos.id')
d = html2text.HTML2Text().handle(s.text)
print(d)
Этот несложный код получит в переменную s с помощью GET запроса HTML код главной страницы сайта golos.io. Мы пока не будем копаться в тегах HTML в поисках нужных нам кусочков сайта, а просто преобразуем всю веб страницу в обычный текст с помощью d = html2text.HTML2Text().handle(s.text) и выведем на экран командой print(d).
API, JSON и GET запросы
С помощью GET запросов можно обратиться к API любого сайта. API - это технология, позволяющая программам давать GET или POST запросы, и получать в ответ какую-то информацию, чаще всего отформатированную в формате JSON. Почитайте подробнее о том что такое API и JSON, если вы не в курсе. На каждом сайте где есть API, существует подробное описание какие именно запросы нужно слать, чтобы получить определенную информацию.
Простейший API запрос состоит из обычной HTTP ссылки сформиравнной так как нам нужно, и открываемой с помощью обычного GET запроса (справится билиотека requests О которой мы говорили выше.). Например давайте составим запрос к бирже bittrex чтобы получить актуальную информацию о торговой паре BTC-GBG
https://bittrex.com/api/v1.1/public/getmarketsummary?market=BTC-GBG
Пример JSON ответа можно посмотреть, открыв ссылку приведенную выше в обычном браузере.
{"success":true,"message":"","result":[{"MarketName":"BTC-GBG","High":0.00002270,"Low":0.00002036,"Volume":143801.71600916,"Last":0.00002111,"BaseVolume":3.08218412,"TimeStamp":"2017-09-07T04:23:01.57","Bid":0.00002104,"Ask":0.00002135,"OpenBuyOrders":114,"OpenSellOrders":2374,"PrevDay":0.00002123,"Created":"2017-02-12T00:38:21.023"}]}
Давайте попробуем реализовать этот запрос из Python. С помощью модуля json выделим из всей этой каши что отдает нам запрос, какой-то определённый параметр, например курс биткоина к GBG.
import requests
import json
s=requests.get('https://bittrex.com/api/v1.1/public/getmarketsummary?market=BTC-GBG')
data = s.json()
k = data["result"][0]["Last"]
print("%.8f" % k)
Здесь мы сперва дали обычный GET запрос к API сайта bittrex и получили ответ в переменную s. Теперь нужно преобразовать эту JSON строчку в данные. Это мы сделали командой data = s.json().
Если мы посмотрим на структуру JSON ответа, то увидим тройную вложенность структур - словарь вложен в список, который в свою очередь вложен еще в один словарь. Это видно по фигурным и квадратным скобкам - эти скобки определяют словари и списки.
{"success":true,"message":"","result":[{"MarketName":"BTC-GBG","High":0.00002270,"Low":0.00002036,"Volume":143801.71600916,"Last":0.00002111,"BaseVolume":3.08218412,"TimeStamp":"2017-09-07T04:23:01.57","Bid":0.00002104,"Ask":0.00002135,"OpenBuyOrders":114,"OpenSellOrders":2374,"PrevDay":0.00002123,"Created":"2017-02-12T00:38:21.023"}]}
Нам нужно получить элемент словаря с ключом 'Last', мы видим что этот словарь вложен в список, в котором всего 1 элемент имеющий индекс 0, а этот список является значением словаря с ключом 'result'. Поэтому чтобы добраться до значения 'Last' придётся построить трехэтажную конструкцию k = data["result"][0]["Last"].
Если вы сразу не поняли о чём я говорю, внимательно присмотритесь к вложенности скобок в JSON ответе. Фигурные скобки - это словарь, а квадратные - список. Мы изучали списки и словари в предыдущих уроках. И списки и словари могут быть вложены друг в друг (являться одними из элементов). В нашем случае мы получили тройную вложенность словарь-список-словарь, поэтому чтобы добраться до значений нужного нам внутреннего словаря, пришлось писать подряд три квадратные скобки k = data["result"][0]["Last"].
Полученное число будет выглядеть вот так 2.104e-05, поэтому в команде print("%.8f" % k) мы с помощью "%.8f" % k укажем что нам нужно вывести обычное число, с 8 знаками после запятой.
0.00002104
Итак, сегодня мы научились работать с GET запросами, получать HTML код и текст любых страниц любого сайта. А также мы заглянули в волшебный мир API и JSON и немножко поломав мозг, вытащили из JSON ответа биржи bittrex текущий курс GBG. В следующем уроке мы разберём тему работы с интернетом более подробно. Подписывайтесь на мой блог, будет ещё много интересного!
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
t3ran13, svetlanaaa, karusel1, on1x, vika-teplo, kondratij, graff0x, bombo, prifix, dignityinside, vlad1m1r
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
@pythono Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за общую выплату получил
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Тоже слежу за уроками. Пока набираю несложные коды, чтоб руки и голова привыкли к синтаксису, где скобки, где кавычки, двоеточия и т.д. Ждем продолжения.
Спасибо, буду делать уроки дальше )) В ближайшие дни
Магия =) А если нет своего API у сайта, надо парсить! Например используя "чудесный суп" или lxml. Читая мануалы забуксовал, там начинаются регулярные выражения и синтаксис свой (
Я скоро разберу тему регулярных выражений и парсинга сайтов )) У меня это есть на очереди в будущих уроках. И Beautiful Soup и Selenium будут ))
Да, слежу за вашими уроками
"Сегодня мы научимся получать информацию из сети интернет"
Фраза в ступор ввела!))
Имеется ввиду с помощью Python кончено же )) С помощью браузера и гугла мы то и так умеем )) Но иногда какую-то информацию нужно получать и обрабатывать автоматически - программно
Вот читаю, а сам думаю "Как я далек от этого"!)))
Так нужно почитать внимательно все уроки, и к тому же заняться самообучением (одних моих уроков недостаточно). Когда попробуешь сделать 5-10 программок самостоятельно, набьешь пару шишек, получишь опыт, потом все покажется понятнее и проще )) Ну если конечно вообще есть желание учиться программировать