• Как узнать значение "city"?

    igorzakhar
    @igorzakhar
    Это словарь и есть, можешь проверить так:
    type(r.json())

    Соответственно, у словаря есть ключи, которые можно посмотреть методом keys():
    >>> geo = {'format': 'json', 'lat': f'51.22778325', 'lon': f'51.43176735508452'}
    >>> r = requests.get('https://nominatim.openstreetmap.org/reverse', params=geo)
    >>> r.json()
    {'place_id': 158413949,
     'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright', 
     'osm_type': 'way', 'osm_id': 227214466,
     'lat': '51.22778325', 
     'lon': '51.43176735508452', 
     'display_name': '2/3, улица Юрия Гагарина, Уральск, Уральск Г.А., Западно-Казахстанская область, 090005, Қазақстан', 
     'address': {'house_number': '2/3', 'road': 'улица Юрия Гагарина', 'city': 'Уральск', 'county': 'Уральск Г.А.', 'state': 'Западно-Казахстанская область', 'ISO3166-2-lvl4': 'KZ-ZAP', 'postcode': '090005', 'country': 'Қазақстан', 'country_code': 'kz'}, 
     'boundingbox': ['51.2274636', '51.2280884', '51.4309297', '51.4323584']}
    >>> type(r.json())
    <class 'dict'>
    >>> r.json().keys()
    dict_keys(['place_id', 'licence', 'osm_type', 'osm_id', 'lat', 'lon', 'display_name', 'address', 'boundingbox'])
    >>>


    UPD. В значении ключа address тоже словарь. Узнать ключи словаря в address:

    ...
    >>> r.json().get('address').keys()
    dict_keys(['house_number', 'road', 'city', 'county', 'state', 'ISO3166-2-lvl4', 'postcode', 'country', 'country_code'])
    ...


    Узнать значение поля city можно так:

    ...
    >>> r.json().get('address').get('city')
    'Уральск'
    ...
    Ответ написан
    2 комментария
  • Почему не выдаёт значение? Пишет ошибку get_text(), что делать?

    igorzakhar
    @igorzakhar
    У тебя ошибка: AttributeError: 'NoneType' object has no attribute 'get_text'
    Решение в лоб:

    ...
    for item in items:
        div = item.find("div",  class_="text")
        if div:
            cards.append(div_text.get_text())
    ...
    Ответ написан
    Комментировать
  • Почему в моем коде возникают ошибки Task exception was never retrieved и Traceback (most recent call last)?

    igorzakhar
    @igorzakhar
    В строке запроса:
    sql = "INSERT INTO `companies` "\
    "(`tg-id`, `tg-login`, `company-name`, `line-business`, `line-business-id`) "\
    "VALUES (%s, %s, %s, %s, %s)"

    с именами полей ты используешь символ "гравис" (grave accent, ASCII code 96), а его нельзя использовать в качестве ординарных кавычек.

    Также тебе нужно задуматься над комментарием Dr. Bacon:

    ну и глобальная проблема, у тебя async код, но с базой ты работаешь в синхронном режиме, эти моменты будут всегда блокировать event loop и никакой пользы от async ты не получишь
    Ответ написан
  • Как достать тег content из с помощью bs4 python?

    igorzakhar
    @igorzakhar
    >>> from bs4 import BeautifulSoup
    >>> html_chunk = '<meta property="og:description" content="Студенческая ул., 187, Энгельс, Саратовская область" />'
    >>> soup = BeautifulSoup(html_chunk)
    >>> desc = soup.find("meta", property="og:description")
    >>> desc.get("content")
    'Студенческая ул., 187, Энгельс, Саратовская область'
    >>>
    Ответ написан
    Комментировать
  • Закрывается консоль Python на определённом месте, что делать?

    igorzakhar
    @igorzakhar
    Кавычки забыл поставить:
    if zhrat == "да":
    Ответ написан
    Комментировать
  • Почему не находит файл, хотя он есть?

    igorzakhar
    @igorzakhar
    В функции processing_order() ты первой вызываешь функцию get_orders(), в которой переходишь в каталог new_orders (строка os.chdir("new_orders/")). Затем ты вызываешь delete_garbage(), в этой функции ты снова переходишь в каталог new_orders (строка os.chdir("new_orders/")) уже находясь в new_orders. И если в каталоге new_orders нет ещё одного каталога с именем new_orders, то возникает ошибка которую ты видишь.
    Ответ написан
  • Как вывести многострочные переменные в одну строку в python?

    igorzakhar
    @igorzakhar
    Решение "в лоб":
    import alfabet_ascii
    
    letters = [alfabet_ascii.H, alfabet_ascii.E,
               alfabet_ascii.L, alfabet_ascii.L, alfabet_ascii.O]
    
    row = 0
    while row < 7:
        line = ""
        column = 0
        while column < len(letters):
            letter = letters[column]
            line += letter[row] + "   "
            column += 1
        print(line)
        row += 1


    alfabet_ascii.py
    A = ["  A  ", " A A ", "A   A", "AAAAA", "A   A", "A   A", "A   A"]
    B = ["BBBB ", "B   B", "B   B", "BBBB ", "B   B", "B   B", "BBBB "]
    
    H = ["H   H", "H   H", "H   H", "HHHHH", "H   H", "H   H", "H   H"]
    E = ["EEEEE", "E    ", "E    ", "EEE  ", "E    ", "E    ", "EEEEE"]
    L = ["L    ", "L    ", "L    ", "L    ", "L    ", "L    ", "LLLLL"]
    O = [" OOO ", "O   O", "O   O", "O   O", "O   O", "O   O", " OOO "]


    61f1ac7c3fcbd484271510.png
    Ответ написан
    Комментировать
  • Как конвертировать куки в приемлемый для requests формат?

    igorzakhar
    @igorzakhar
    import pickle
    
    with open('filename.pkl', 'rb') as fd:
        data = pickle.load(fd)
    Ответ написан
  • Что делать с этой ошибкой?

    igorzakhar
    @igorzakhar
    Убирай из URL "ru":
    >>> URL = 'https://blockchain.info/ticker'
    >>> response = requests.get(URL)
    >>> response.json()
    {'AUD': {'15m': 51425.37, 'last': 51425.37, 'buy': 51425.37, 'sell': 51425.37, 'symbol': 'AUD'}, '...}
    Ответ написан
  • Как исправить данный код?

    igorzakhar
    @igorzakhar
    Ты, видимо, забыл эту строчку:
    proxies = get_free_proxies()
    перед:
    s = get_session(proxies)

    Предположу, что после написания статьи html код страницы уже успел измениться.
    def get_free_proxies():
        url = "https://free-proxy-list.net/"
        # посылаем HTTP запрос и создаем soup объект
        soup = bs(requests.get(url).content, "html.parser")
        proxies = []
        for row in soup.find("table", attrs={"class": "table"}).find_all("tr")[1:]:
            tds = row.find_all("td")
            try:
                ip = tds[0].text.strip()
                port = tds[1].text.strip()
                host = f"{ip}:{port}"
                proxies.append(host)
            except IndexError:
                continue
        return proxies


    >>> proxies = get_free_proxies()
    >>> proxies
    ['85.195.120.157:1080', '142.82.48.250:80', '58.234.116.197:8193', ..., ....]
    ...
    ...
    Ответ написан
  • Как грамотно скрыть токен?

    igorzakhar
    @igorzakhar
    Пункт меню "Settings" в админке Heroku:

    61e838a57aeaa032563790.png

    Жмем кнопку "Reveal Config Vars ", добавляем переменные окружения:

    61e8392da7e75577329883.png

    Или через Heroku CLI (https://devcenter.heroku.com/articles/config-vars):
    heroku config:set GITHUB_USERNAME=joesmith
    Adding config vars and restarting myapp... done, v12
    GITHUB_USERNAME: joesmith


    В коде, для примера:
    access_token = os.getenv("ACCESS_TOKEN")
    ...
    Ответ написан
    Комментировать
  • Deadlock - как правильно закрыть канал?

    igorzakhar
    @igorzakhar
    Ответ написан
    Комментировать
  • Изучение сетевых технологий с чего начать?

    igorzakhar
    @igorzakhar
    Сети для самых маленьких: https://linkmeup.ru/blog/1188/
    Ответ написан
    Комментировать
  • Как правильно вычислять количество подсетей?

    igorzakhar
    @igorzakhar
    Для примера на картинке:
    количество хостов (маска с префисом /28) = 14: 32-28 = 4; 2^4 = 16-2(1 адрес сети и 1 широковещательный адрес) = 14 хостов на подсеть.
    Количество подсетей: 16-4=12; 2^12 = 4096.

    В случае 192.168.0.0/25: 32-25=7; 2^7=128 хостов, но фактически 126 хостов на подсеть т.к. -1 на адрес сети и -1 на широковещательный адрес. Подсети: 16-7=9; 2^9=512 подсетей.
    Ответ написан
    Комментировать
  • Зачем ростелеком забрал 80 порт?

    igorzakhar
    @igorzakhar
    Пролог. Существует очень много абонентских устройств(роутеры, модемы и пр.) на которых, по умолчанию, выключены даже самые базовые настройки безопасности. Все эти устройства торчат наружу портами 80, 23 и пр.; при этом на многих устройствах, особенно старых, установлены реквизиты для входа в настройки вида admin/admin; так же можно использовать доступ через логин superadmin (пароли для данного логина под многие устройства можно найти в сети). Вспоминаются старые модели роутеров sagemcom, на которых пароли были захардкожены в js коде web-интерфейса и которые можно было без труда найти используя, например, chrome devtools в браузере chrome. В настощее время эта проблема отчасти решена - на многих новых моделях роутеров/модемов для каждого устройства существует отдельный пароль и увидеть его можно только на наклейке на нижней части корпуса (где серийный номер, мак адрес и пр.).

    Все эти "уязвимости" эксплуатируются для доступа на роутеры/модемы через подбор паролей. Используют "взломанные" устройства по-разному. Например, фишинговые атаки, для которых подменяют dns адреса на роутерах.

    Так вот, где-то в недрах ростелеком решили "обезопасить" роутеры своих абонентов от подобных атак фильтруя входящие соединения на порты 80, 23 и некоторые другие.
    Ответ написан
    Комментировать
  • Web server на go в шаблоне не отдает изображение. Что не так?

    igorzakhar
    @igorzakhar
    ...
    <div class="col"><img src="/images/one.png" alt="img"></div>
    ...


    5d78c5c77c57b092229910.png
    Ответ написан
    Комментировать
  • Почему при отправке get запроса получаю 403 ответ, а из браузера с расширением postman получаю 200?

    igorzakhar
    @igorzakhar
    >>> import requests
    >>> headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ke Gecko) Chrome/61.0.3163.100 Safari/537.36'}
    >>> res = requests.get('https://api.asos.com/product/catalogue/v2/products/12181064?store=ROlang=en-GB&currency=HKD', headers=headers)
    >>> res.status_code
    200
    >>> res.json()
    {'id': 12181064, 'name': 'ASOS DESIGN ruched mini dress with puff sleeves in check print', 'description': '<
    ...
    ...
    }
    Ответ написан
    Комментировать
  • Как блокируется поток?

    igorzakhar
    @igorzakhar
    Ответ написан
    Комментировать
  • Обмен сокетов между Python и Java?

    igorzakhar
    @igorzakhar
    Сокет - это абстракция операционной системы, некая структура данных ядра, которая не зависит от языка программирования. Вы можете написать сервер на одном языке, а клиент написать на другом языке. Программа-"сервер" создает слушающий сокет (listen), программа-клиент, написанная на другом ЯП, подключается (connect) к серверу.
    Ответ написан
    2 комментария