Задать вопрос
  • Как сделать парсинг почты на python?

    @del4pp
    На пайтоне есть библиотека imaplib, которая позволяет получать письма с вашего ящика через IMAP и парсить их . Ниже мой код который я создавал для себя для такой же задачи.

    def read(sender_of_interest=None):
        imap = imaplib.IMAP4_SSL("imap.gmail.com", 993)
        imap.login('Почта', 'пароль')
        imap.select('INBOX')
        if sender_of_interest:
            status, response = imap.uid('search', None, 'UNSEEN', 'FROM {0}'.format(sender_of_interest))
        else:
            status, response = imap.uid('search', None, 'UNSEEN')
        if status == 'OK':
            unread_msg_nums = response[0].split()
        else:
            unread_msg_nums = []
        data_list = []
        for e_id in unread_msg_nums:
            e_id = e_id.decode('utf-8')
            _, response = imap.uid('fetch', e_id, '(RFC822)')
            html = response[0][1].decode('utf-8')
            email_message = email.message_from_string(html)
            data_list.append(email_message.get_payload())
        for elem in data_list:
            clean_html(elem)


    а дальше все просто:
    if "ключевое слово" in массив_с_сообщениями[индекс сообщения]:
    ...то что надо сделать если ключевое слово найдено.

    ну и в цыкле понятное дело
    Ответ написан
    Комментировать
  • Как скомпилить два файла в exe?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Эээ... два файла с каким содержимым? И что в итоге оно должно делать, полученное ехе?
    Ответ написан
    Комментировать
  • Как сделать авторизацию на сайт при парсинге через requests?

    @Realmixer
    Full stack Python (Django) web-developer
    Как правило, любой сайт при авторизации устанавливает в браузер куки. Браузер при каждом запросе сообщает эти куки на сайт, благодаря чему тот "понимает" какой пользователь совершил запрос. Соответственно тебе нужно передавать эти куки при каждом запросе так же как браузер. Вряд ли в Дневнике используется что-то хитрее.

    Начать можно с того, что залогиниться на сайте и собрать все куки для домена сайта. В Хроме это делается так: F12 — Application — Storage — Cookies. Захадрдкодь найденные куки:
    cookies = {
        '_ym_isad': '...',
        '_gid': '...',
        '_ym_uid': '...',
        '_ga': '...',
        '_ym_d': '...',
        '_gat': '...',
        '_gat_main': '...',
    }
    r = requests.get(url, cookies=cookies)

    Если это сработает, тогда думай сценарием авторизации из своего скрипта.
    Ответ написан
    Комментировать
  • Как сделать авторизацию на сайт при парсинге через requests?

    @Hiccup
    На коленке состряпал, вроде работает:
    import requests
    
    url = "https://login.dnevnik.ru/login/esia/karelia"
    #url на свой регион заменишь, там когда на сайте авторизуешься он отображается
    
    login = 'логин'
    password = 'пароль'
    session = requests.Session()
    get_cookies = session.get(url)
    captcha_id = get_cookies.cookies['dnevnik_sst'].split('|')[0]
    print(captcha_id)
    
    data = {
    	'exceededAttempts': False,
    	'login': login,
    	'password': password,
    	'Captcha.Id': captcha_id
    }
    
    response = session.post(url, data)

    Для всех операций используешь объект session, в нём будут сохранятся куки, и потом можно обращаться к страницам, как будто ты авторизованный, например так:
    my_class_html = session.get('https://schools.dnevnik.ru/class.aspx')
    
    schedule_html = session.get('https://schools.dnevnik.ru/homework.aspx')
    Ответ написан
    2 комментария
  • Как найти похожие ПО ЦВЕТУ товары по изображению?

    dom1n1k
    @dom1n1k
    Алгоритм примерно такой:
    1. Картинки переводятся в пространство CIE Lab. Можно предварительно их уменьшить для ускорения (хотя с уменьшением там свои нюансы).
    2. Все имеющиеся на картинке цвета кластеризуются и выделяются 2-3 доминантных кластера. Алгоритмов кластеризации очень много, читайте википедию.
    3. Похожесть доминантных цветов двух картинок определяется по формуле DeltaE, она тоже есть в википедии. Можно не заморачиваться с продвинутой версией DE2000, скорее всего будет достаточно обычной DE1976.
    Ответ написан
    2 комментария
  • Как сделать такой фильтр?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    Ответ написан
    Комментировать
  • Как удалить водяной знак с помощью Python?

    deepblack
    @deepblack Куратор тега Python
    Плохо искал:
    https://stackoverflow.com/a/50800425/2981702
    https://stackoverflow.com/a/55811304/2981702

    https://github.com/marcbelmont/cnn-watermark-removal
    https://github.com/LJSthu/Python-Remove-Watermark

    А вообще плохая затея удалять вотермарки с чужих изображений.
    Купить нужные картинки не так уж и дорого. IMHO
    Либо брать с unsplash.com
    Ответ написан
    1 комментарий
  • Как работать с xpath в lxml Python?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    вот такое, с номерами
    div[1] tr[2]
    плохая практика, нужно уметь без них
    это во вторых

    а во первых, где ты в коде view-source:myip.ru DOM дерево нашел?
    там же сплошной JS
    Ответ написан
    7 комментариев
  • Как вытащить emailы и телефоны из linkedin?

    Revencu
    @Revencu
    Надо иметь премиум аккаунт, Sale Navigator и то есть лимиты
    Ответ написан
    Комментировать
  • Как получить полный html код страницы с помощью requests.get()?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Откройте инструменты разработчика и полистайте страницу вниз. Обратите внимание на url и параметр page:
    5e7b53b9d04da941287952.png
    Ответ написан
    6 комментариев
  • Не могу решить задачу на Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Да, вы не можете решить задачу на Python.
    Ответ написан
    Комментировать
  • Как использовать транспортную сеть оптимально?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Не могу сказать, насколько это решение будет оптимальным по времени, не зная предполагаемого размера графа. Но есть решение через максимальный поток, котрое точно наилучшим способом пустит машины.

    Раздуйте граф, сделав копии каждой вершины для каждого возможного времени. Т.е.если предполагается, что есть решение не длинее 1000 едениц веремни, то создаете граф с 1000*V вершинами, по одной для каждой вершины начального графа и возможного времени. Для каждого ребра входного графа u->v создайте ребро {u,t}->{u,t+1}. В этом графе есть много входных вершин (любое время, начальная вершина) и много конечных вершин (любое время). Но тут уже нет условия на непересечение машин в одно и то же время. Вместо этого пути машинок просто не могут пересекаться по вершинам вообще. Ведь каждая вершина символизирует вершину+время.

    Теперь еще раз преобразуем граф - сделайте новую входную вершину и соедените ее со всеми входными вершинами в этом графе. Также сделайте новую конечную вершину и соедените ее со всеми конечными вершинами. Каждую оставшуюся вершину разделите на 2 - вход и выход. Все ребра ведущие в эту вершину пустите во вход, и так же поведите все ребра из начальной вершины из выхода. Соедените вход и выход ребром.

    В этом графе пути уже должны не пересекаться по ребрам (ведь каждая вершина заменена ребром между двумя новыми вершинами) и все пути ведут из начала в конец. Чтобы разрешить машинам пересекаться в начальной и конечной вершине, начальные и конечные вершины графа не раздваивайте и сделайте пропускную способность ребер из начальной и в конечную вершины равными n. Все остальные пропускные способности равны 1.

    Теперь пустите максимальный поток в этом шрафе, и он найдет вам сколько-то путей машин не пересекающихся по ребрам. Эти пути однозначно задают вам пути машин в изначальном графе - когда выпускать машину и по какому пути она идет.

    Что бы найти оптимальный пути запустите бинарный поиск по ответу. Вот выбрали вы число 1000, создали искуственный граф со временем до 1000 для всех вершин. Запустили в нем максимальный поток. Если он нашел меньше n путей, то за 1000 едениц времени все n машин не пустить, пробуйте большее время. Если нашли хотя бы n путей, то можно взять любые n из них.

    Изначальную верхнюю границу по времени можно взять n+V (V - путь в графе, и все машины идут по нему колонной одна за другой).

    Возможно есть улучшение этого решения такое: Вместо бинарного поиска по ответу вы увеличиваете максимальное время на 1, добавляете новые вершины и ребра в граф и каждый раз ищете дополняющие пути (не отчищая уже найденый максимальный поток). Это рещение вроде будет побыстрее, но тут надо аккуратно понимать, что такое остаточная сеть.
    Ответ написан
    1 комментарий
  • Какое направление в программировании выбрать дальше?

    longclaps
    @longclaps
    Чувак, ты же природный писатель. На ровном месте накатал такую простыню. Не?

    За шесть месяцев я повторил всю школьную математику и алгебру, разобрался с некоторыми темами высшей математики (комбинаторика, теория вероятности, математическая логика), познакомился с утройством компьютера, прочитал две книги по программированию на Паскале и сделал парочку учебных проектов, прошелся по программированию на NASM (писал не очень много, т.к. больше интересовало как все работает), затем освоил С и сейчас продолжаю набивать на нем руку.

    Попробуй себя в юмористике.
    Ответ написан
  • Написание калькулятора на python?

    Zoominger
    @Zoominger Куратор тега Python
    System Integrator
    imput

    Пушо input.
    Ответ написан
    3 комментария
  • Может ли парсер обойти капчу?

    CellycoMobiles
    @CellycoMobiles
    indi developer @CellycoMobiles
    Да может. Заказываю здесь
    Ответ написан
    1 комментарий
  • Как вычислить время, которое идёт матч?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Но это плохо работает и время считается немного не так.
    Подскажите, как лучше поступить.

    Так вы делайте немного по-другому и будет работать лучше.
    Ответ написан
    2 комментария
  • Как убрать косую черту при записи запятой CSVPrinter'ом в ячейку?

    @taylor96 Автор вопроса
    Проблема решена
    Поменял формат на
    CSVFormat csvFormat = CSVFormat.DEFAULT.withEscape('.').withQuoteMode(QuoteMode.NONE);
    Ответ написан
    Комментировать
  • Как сделать подключение к бд на другом пк?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Вам четко сказали что
    52 - Unable to locate a Local Database Runtime installation.

    Поставьте sqlexpress. И все заведется.
    Кроме того настройте подключение с использованием БД. Вариант с файлом он больше для разработки.
    Ответ написан
    6 комментариев
  • Какой софт выбрать для управления запуском скриптов?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    Погуглите cron web ui
    Задача простая, поэтому есть много готовых решений.
    Ответ написан
    Комментировать