Задать вопрос
  • Как открыть экранную клавиатуру с помощью Python?

    Hcuy
    @Hcuy
    Профессионально считаю ворон.
    Как вариант использовать вот эту библиотеку
    Ответ написан
    1 комментарий
  • Как ускорить или запустить многопоточно pupeteer?

    @d-sem
    1) Поделить 60000 страниц на порции кратные числу инстансов. Каждому инстансу скармливать свою кучку. Получить ускорение кратное числу инстансов.
    2) Положить 60000 страниц в очередь (rabbitmq, redis, db). Скриптами брать url в работу из очереди. Запускать новые воркеры пока хватает ресурсов. https://www.rabbitmq.com/getstarted.html

    Также может быть полезно https://habr.com/ru/post/413547/
    Ответ написан
    2 комментария
  • Как проверить номер на наличие в соцсетях?

    DevMan
    @DevMan
    это нормально, что не получается – ибо нарушение прайвиси.
    никаких публичных методов для этого нет.
    Ответ написан
    Комментировать
  • Как мониторить работу скрипта?

    @bkosun
    Используйте инструмент, который позволяет контролировать процессы, например Supervisor

    autorestart=true — перезапуск воркера, если тот по какой-то причине упал;
    stopsignal=KILL — сигнал остановки (убийства) процесса. Если не определяется, то используется команда по умолчанию — TERM;


    https://ruhighload.com/%D0%97%D0%B0%D0%BF%D1%83%D1...
    Ответ написан
    Комментировать
  • Как отследить, спарсить, визуально мониторить подключившихся пользователей по OpenVPN?

    @res2001
    Developer, ex-admin
    В конфиге openvpn есть директива status - в ней можно задать путь к файлу куда openvpn будет складывать текущую информацию по подключенным соединениям. Чем парсить - фиг знает, разбирайте его сами, лог простой.

    В директивах log или log-append - указываете общий файл лога, туда льется вся остальная инфа от openvpn.
    Уровень логирования задается с помощью verb.
    Ответ написан
    Комментировать
  • Как асинхронная программа(event loop) понимает, что пришел ответ от сервера?

    bingo347
    @bingo347
    Crazy on performance...
    Что-бы понять асинхронность полностью придется постепенно опустится на самый низкий уровень, вплоть до железа. Но начать стоит с самого верха - с уровня нашего приложения.

    Итак, мы пишем на нашем высокоуровневом любимом языке, неважно JS/Rust/C#/Scala/Python или любой другой. В современном мире у нас скорее всего есть какая либо абстракция для работы с асинхронными апи, предоставляемая или стандартной библиотекой языка или сторонними библиотеками. Она может быть примитивной и основанной на колбэках или более продвинутой, вроде Future/Promise/Task или чем-то подобным. Иногда наш язык предоставляет синтаксис наподобие async/await для более простой работы с этими абстракциями, а иногда асинхронная работа может вообще быть скрыта от нас в рантайме языка, например как с горутинами в Go. Но в любом случае где-то под капотом у нас будет event-loop, а иногда и не один, так как никто не запрещает нам писать многопоточку в то же время используя асинхронные вызовы.

    Сам event-loop - это не более чем обычный while(true) или любой другой бесконечный цикл. И внутри этого цикла наша программа имеет доступ на извлечение к некоторой очереди (если не знаете, что это за структура данных, то погуглите), которая содержит в себе результаты уже обработанных задач. Программа берет очередной результат, находит ожидающий ее колбэк/Promise/Future/Task и запускает выполнение ожидающего кода. Очередей опять же может быть несколько и обрабатываться они могут по разному, но это не важно. Важно то, что наш основной поток (или потоки) ничего не знают, о том как выполняются асинхронные задачи. Он лишь смотрит, есть ли в очереди результат, и если есть - обрабатывает его, а если нет, то принимает решение или выйти из цикла (и завершить поток, а иногда и весь процесс) или уснуть пока новых результатов не появится.

    Но откуда же в очереди берутся результаты? Надо понимать, что асинхронная программа почти всегда многопоточная и результат операций попадает в очередь из фоновых потоков, которые просто блокируются в ожидании нужного ресурса (или сразу многих ресурсов, если используют системные апи вроде epoll или kqueue). Как правило такие фоновые потоки большую часть времени находятся в состоянии ожидания, а значит не потребляют ресурсы CPU и не попадают в планировщик ОС. Такая простая модель действительно позволяет сильно экономить ресурсы по сравнению с моделью, где множество потоков выполняют по 1 задаче и самостоятельно ожидают свои запросы.

    Важно отметить, что в современном мире даже на среднеуровневых языках, вроде C или C++, не говоря уже о высокоуровневых, не реализуют асинхронность сами. Во-первых, на разных ОС для этого используются разные апи. Во-вторых, эти апи на разных ОС умеют обрабатывать разные типы ресурсов (с сетью вроде как умеют работать все основные ОС, но помимо сети асинхронно можно работать с пользовательским вводом, диском и периферийными устройствами, вроде сканеров, вебкамер и прочего цепляемого в usb). Наибольшую популярность (ИМХО) имеет кроссплатформенная библиотека libuv, хотя в Rust принято использовать mio (или даже абстракции над ней, вроде tokio), в C# подобные механизмы есть в .NET Core, а в Go оно уже зашито
    в те самые 1.5МБ рантайма, что Go засовывает в каждый бинарь
    (там правда еще и GC, но один фик это много и достойно вынесения в динамическую либу)


    Ок. С прикладным кодом вроде разобрались. А что же происходит в ядре ОС? Ведь, как писалось выше, у нас даже есть апи, чтоб ждать запросы пачкой. Все просто. Ядра ОС стали асинхронными еще до того, как это стало мейнстримом, если мы конечно имеем дело не с ОС реального времени (но у нас же винда/линь/мак/фряха, а не ОС для бортового компа боинга, где это критично). Смотрите, когда что-то происходит на внешней периферии (ну например диск запрошенные данные прочитал или по сети данные пришли, или юзер мышкой дернул), то формируется прерывание. CPU реально прерывает свою текущую работу и бежит смотреть что случилось, точнее вызывает обработчик предоставленный ОС. Но у ОС то есть основная работа, поэтому она скорее старается освободить обработчик и просто скидывает все данные в оперативку, а разбираться будет потом, когда очередь дойдет. Ничего не напоминает? Очень похоже, на то что происходило в event-loop, только вместо фоновых потоков "результаты" попадают в очередь из прерываний. А уже когда-то потом ОС отдаст данные в драйвер устройства, ну и т.д., пока они не дойдут до нашего прикладного приложения. Вот и все, никакой магии.
    Ответ написан
    3 комментария
  • Правильный анализ большого ip диапазона?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    Есть ли вероятность что сервер вернёт ответ но не сайт который запрашивается?


    есть, но будет же IP ответившего, должен отличаться от сайта,

    Как проверить что прокси подменили ip адрес на свой?

    proxyjudge и более простые проверялки
    Ответ написан
    1 комментарий
  • Где писать функционал приложения? На клиенте или на сервере?

    2ord
    @2ord
    Интеллектуальный труд, который вложен в алгоритм ранжирования я бы не стал перекладывать на клиентов.
    Ответ написан
    Комментировать
  • Где писать функционал приложения? На клиенте или на сервере?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Что клиент не должен видеть в исходном коде страницы - то на сервер.
    Остальное - на клиенте.
    Ответ написан
    Комментировать
  • Где писать функционал приложения? На клиенте или на сервере?

    @xoma99
    Тут имхо, все зависит от сложности вычеслений.
    Но я как разработчик бэка, обычно все вычисления отдаю серваку, зачастую мощей у него больше.
    Но повторюсь, надо смотреть на алгоритмы, их сложность и тяжеловесность.
    Имхо
    Ответ написан
    2 комментария
  • Как из двух массивов сделать один?

    0xD34F
    @0xD34F
    companiesDict = { n['id']: { k: n[k] for k in ('name', 'disabled') } for n in arr1 }
    arr3 = [ { **n, **companiesDict.get(n['company'], {}) } for n in arr2 ]
    Ответ написан
    Комментировать
  • BS не видит классы при парсинге?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Добавлено:
    import requests
    import json
    from bs4 import BeautifulSoup as BS 
    
    headers = {'X-Requested-With':'XMLHttpRequest'}
    url = 'https://steambuy.com/ajax/_get.php?rnd=0.7101602294952999&offset=0&region_free=0&sort=cnt_sell&sortMode=descendant&view=extended&a=getcat&q=PUBG&series=&izdatel=&currency=wmr&curr=&currMaxSumm%5Bwmr%5D=3000&currMaxSumm%5Bwmz%5D=100&currMaxSumm%5Bwme%5D=70&currMaxSumm%5Bwmu%5D=1000&letter=&limit=0&page=1&minPrice=0&maxPrice=5000&minDate=0&maxDate=0&deleted=0&no_price_range=0&records=14'
    
    response = requests.get(url,headers=headers)
    soup = BS(json.loads(response.text)['html'],'html.parser')
    items = soup.find_all('a',class_='product-item__title-link')
    for item in items:
    	print('https://steambuy.com'+item.get('href'))

    На выходе:
    https://steambuy.com/steam/playerunknown-s-battleg...
    https://steambuy.com/steam/playerunknowns-battlegr...

    Конечно не можете найти, так как результаты подгружаются с другого адреса:
    https://steambuy.com/ajax/_get.php+много параметров

    5ea31a5f2854d865027267.png
    Ответ написан
    4 комментария
  • Платформа для парсера 24/7 и архитектура?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Добавлю то, о чём ещё не упоминали.
    Вот как бы сама архитектура "на пальцах":
    0-[Командуем: url task manager: queue]
    1-1234567890 [льём: head-less browser/etc.]
    2-1234567890 [decomposer]
    3-123456...
    ....
    N-1234567890 [сохраняем: db data insert]
    Goto 0

    Строки - уровни обработки, числа - параллельные единичные потоки.

    1. Задача - динамическая коммутация между функциональными потоками соседних слоёв.
    Т.е. поток после отработки никогда не закрывается, а ждёт нового задания от любого блока с уровня выше (меньший номер строки)!
    В этом - вся "соль" скорости обработки!

    2. Копите знания: Всегда кэшируйте "скелет" нахождения данных (динамические правила) при интеллектуальной декомпозиции разметки - это сильно сокращает время детекции уже встречавшихся блоков (одинаковый блок кода или шаблон страницы, одинаковая CMS, и т.д.).
    Ответ написан
    4 комментария
  • Платформа для парсера 24/7 и архитектура?

    CellycoMobiles
    @CellycoMobiles
    indi developer @CellycoMobiles
    Мне в свое время мозги вправил StormCrawler. Достаточно подробно описана инфраструктура. Понравились решения для фетчинга и индексации.
    Переделал на микросервисы. Считаю хорошим решением для старта.
    Ответ написан
    Комментировать
  • Как переместить все print из цикла в 1 строку?

    DevMan
    @DevMan
    полезно читать документацию.
    for i in inp:
    	print(inp[x-1:x], end="")
    	x = x - 1
    Ответ написан
    Комментировать
  • Автокликер по элементам сайта. Как реализовать на питоне?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Ответ написан
    Комментировать
  • Как правильно спроектировать GUI приложения, написанного на питоне?

    Zoominger
    @Zoominger Куратор тега Python
    System Integrator
    не лучше ли сделать на MS Visual Studio простое диалоговое окно, которое будет по нажатию на каждую кнопку запускать exe, сконвертированное из питоновского py модуля с разными параметрами командной строки


    Каких только извращений не накрутят, лишь бы PyQt не осиливать.
    Ответ написан
    5 комментариев
  • PyQt5 как сделать нормальный LineEdit?

    Zoominger
    @Zoominger
    System Integrator
    Заменить его на textEdit.
    LineEdit потому и Line, что одна строка.
    Ответ написан
    Комментировать
  • Куда податься с такими навыками?

    Lucian
    @Lucian
    https://t.me/MakeFreelance
    Привет, вам нужно несколько поменять представление о фрилансе, чтобы небыло ложных мыслей.

    > 500-600$, которые даются непросто из-за ужасного демпинг
    Заблуждение всех начинающих фрилансеров, демпинг не влияет на взятие заказа, т.к. более менее опытный заказчик, предпочитает отдавать работу тому, кто реально может решить его проблему, а не тем кто депингует.

    Влияют в разной мере совершенно другие факторы:
    1. Скорость ответа
    2. Релевантное портфолио
    3. Релевантный профиль
    4. Стиль письма
    5. Навыки общения
    7. Хорошие отзывы
    И еще много других...не буду раздувать ответ, это довольно общее описание, для конкретики нужно больше текста и не один час.

    > останавливает только плохое знание английского
    Я начинал с переводчика, на качество общения не влияло, если умеете на русском правильно сформулировать мысль, то с переводом вообще проблем не будет.

    Еще вам нужна стратегия общения с клиентом, чтобы четко вести его от первого сообщения, до закрытия сделки. Решается практикой общения и обратной связью от клиентов.
    Ответ написан
    8 комментариев