• Как парсить приложение на андройд?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Пример для LDplayer.
    После установки запускается эмулятор.
    То что на экране можно спарсить командой
    ldconsole adb --id 1 --command 'shell uiautomator dump'

    потом копируется файл на локальный компьютер
    ldconseole adb --id 1 --command 'pull /sdcard/window_dump.xml window_dump.xml'

    Файл формата xml. Так же через консоль можно нажимать кнопки, запускать приложения и прочее.
    Ответ написан
    Комментировать
  • Как спарсить данные с сайта?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Если правильно помню, то в цикле можно проверять
    if (!in_array($a->href, ['#USDKZT', '#EURKZT']) ) continue;


    Как вариант использовать внутренние запросы
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://kase.kz/charts/currency/history',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS =>'symbol=USDKZT_TOM&resolution=D&from=1658040727&to=1658040727&chart_language_code=ru',
      CURLOPT_HTTPHEADER => array(
        'Accept: */*',
        'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
        'Cookie: __Host-csrftoken=КУКА; ',
        'Referer: https://kase.kz/ru/currency/',
        'X-CSRFToken: ТОКЕН',
        'X-KL-Ajax-Request: Ajax_Request',
        'X-Requested-With: XMLHttpRequest'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;


    Правда непонятно, как часто меняются куки и токен, по идее можно делать запрос на получения куки и токена и проверить, когда она "протухнет". Обычно действуют от 1 до 24 часов.
    Payload: symbol=USDKZT_TOM&resolution=D&from=1658040727&to=1658040727
    Время указываем текущие (или диапазон). Если указать одинаковыми:
    {"c": [486.35], "t": [1658102400], "o": [482.0], "v": [131183750], "h": [487.3], "l": [482.0], "s": "ok"}
    Ответ написан
    1 комментарий
  • Как называется нормальный парсер прокси?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Ну если надо разово и список, то просто можно написать код в js и запустить в консоли. Например, я делал так. Собрать из таблицы ip из первого столбика, а порт из второго.
    let items = []; document.querySelectorAll('tr').forEach(item => { if(item.querySelectorAll('td')[2]?.innerText.trim() == 'HTTPS')items.push(item.querySelectorAll('td')[0]?.innerHTML + ':' + item.querySelectorAll('td')[1]?.innerHTML);})


    У меня также есть на гитхабе небольшой проект, который собирает прокси и проверяет их.

    Сохранения в файл там нет, но дописать можно. Есть композиция, а в первой коммит как раз собирает образы локально из пакетов, которые есть также на гите. Итоги можно потом посмотреть в бд
    Ответ написан
  • Какой способ парсинга выбрать?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Тут вариант - перейти на очереди. При чем без разницы, на каком языке будут крутится воркеры.
    Например, надо проверить ссылки, кидаем в очередь все ссылки. Очередь можно использовать любую - Redis, Gearman, YandexMQ, RabbitMQ. Последний я тестил с 10к записями, но многие пишут, что с 1м медленно работает. По идее Яндекс должен нормально справляться с такими нагрузками. Ну а Редис и Гирман довольно легко переваривают по 100к записей
    Я рекомендовал бы использовать Redis. И очень сильно не рекомендую использовать Mysql для этого.

    А дальше просто воркеры выполняют задачу и записывают результат. Ну или кидают в другую очередь. Воркеры можно писать на любом языке. Это довольно большой плюс. Также их можно размещать на разных серверах. Можно запустить несколько воркеров на php и несколько на python. И проверить их скорость.

    Работу воркеров можно через Supervisor контролировать - автозапуск, рестарт и количество запущенных воркеров.

    Зачем кидать результат в другую очередь? Чтобы избежать кучи одновременных коннектов к базе. Просто один-два воркера собирают результаты и записывают в базу.

    Ну и первые воркеры будут выполнять определенную задачу и будут работать с очередями. То есть, взял задание, выполнил и кинул результат. На Python подобный скрипт будет потреблять памяти 5-15Мб. Можно около сотни воркеров на слабой vds запустить.
    Ответ написан
    Комментировать
  • Где можно скачать точные IP диапазоны?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Знаю интересный сервис Sypex Geo.
    1. База оптимизирована
    2. Можно использовать бесплатно.
    3. Устанавливается локально. Обновлять можно с периодичностью в несколько дней.
    4. Есть методы для php и python.
    Ответ написан
  • Как задать пользователя для cron?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Личные файлы пользователей для cron заданий, хранятся в директории /var/spool/cron/ или /var/cron/tabs/.

    Чтобы отследить выполнение задач или отследить ошибки, можно обратиться к лог-файлу /var/log/cron.
    Ответ написан
    Комментировать
  • Не подскажете бот/сервис поиск контента по Телеграм?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Есть боты у некоторых СРМ, но надо добавлять специального бота в админы (это у большинства).

    Мне нужен был поиск по нескольким каналам. Так что я написал парсер для телеграм. Он парсит канал в базу PostgreSQL. А потом можно из базы брать данные и выводить куда-нить. Например, можно выводить пользователей, которые писали определенные слова или репостить.
    Ответ написан
    1 комментарий
  • Как сделать парсинг страницы на сайте?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Довольно простой и глупый вопрос: а зачем заниматься парсингом, если есть оффициальный апи? Он бесплатный, токен получается в кабинете. Ссылка на документацию

    Вот ссылка на биржу ссылка, у меня даже без токена открывается
    Ответ написан
    Комментировать
  • Как спарсить курс доллара сбербанка?

    Ichi
    @Ichi
    Увлекаюсь программированием
    У них даже получение json подзащитой. Тут только через selenium

    Кстати, пока смотрел нашел несколько запросов, которые выдают курс json:
    https://www.sberbank.ru/proxy/services/rates/public/actual?rateType=ERNP-41&isoCodes[]=USD&isoCodes[]=EUR&regionId=038
    https://www.sberbank.ru/proxy/services/rates/public/actual?rateType=ERNP-2&isoCodes[]=USD&isoCodes[]=EUR&regionId=038


    Ещё есть варианты:
    1. Через офф api. Раньше там было через получение токена, но сейчас походу он платный.
    2. Через сторонние сайты, но тут могут быть задержки или неверная информация.
    Ответ написан
    Комментировать
  • Инструмент, который парсит посты из чатов телеграм по ключевым словам. Как?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Я как то делал парсер для нескольких каналов. Так как поиск в телеграм работает через одно место. Попробовать можно через него.
    Ссылка на гит
    Ответ написан
    1 комментарий
  • Настройка datacol не парсит картинки и нформацию с вкладки сайта. Как подобрать правильное Xpath выражение?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Судя по коду сайту - картинки грузятся позже с помощью js. Поэтому при запросе их банально ещё нет.

    Можно парсить JS. На странице есть код:
    setimage: function setimage() {
    				var litpicList = "/upload/1/article/1592963023206.jpg|/upload/1/article/1592977873403.jpg|/upload/1/article/1592977873590.jpg|/upload/1/article/1592977873762.png" 
    				var images = new Array();


    То есть можно найти на странице регулярков вида regex = /var litpicList = "(.*)"/gm;
    Где и будет список картинок с разделителем |
    Ответ написан
    Комментировать
  • Как найти бота или чат по id в Telegram?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Ну тут поможет оффициальный справочник API телеграм: метод получения информации по user id

    На сколько понмю, бот не умеет получать информацию о пользователе из-за ограничений.
    Ответ написан
    Комментировать
  • Как парсить динамические сайты типа dns-shop?

    Ichi
    @Ichi
    Увлекаюсь программированием
    У ДНС хорошая защита от парсинга. При чем некоторые json ответы на запросы можно получить только через браузер.

    Для начала можно составить список всех товаров. Ссылки на товары можно взять из карты сайта https://www.dns-shop.ru/sitemap.xml

    Там вроде получается около 600к ссылок. Смартфоны потом ищутся банально по слову smartphone в ссылке

    Далее через селениум парсятся сами страницы.

    По идее можно парсить только данные от микроразметки, например,
    https://www.dns-shop.ru/product/microdata/d5635852...
    Тут есть данные бренда, названия, цены, рейтинга. Проблема только получения этих uuid товаров

    И да, сразу предупреждаю, скрипты ДНС отслеживают роботов. И если что, сразу банят ip адреса (возможно даже подсеть). Так что много запросов с одного ip делать нельзя.
    Ответ написан
  • Как спарсить ozon средствами PHP?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Могу посоветовать попробовать пакет spatie/crawler, который используется для обхода ссылок на сайте. Сам Spatie его использует для составления карты сайты через парсинг сайта. Если правильно помню, он работает через js (так как можно ему отправлять js код на выполнение).

    Когда пытался спарсить некоторые данные с определенного сайта, тоже столкнулся с проблемой - там сайт грузится постфактум через js с проверкой, что это человек. Я использую Python-Selenium-WebDriver. А на этот пакет наткнулся уже позже и не проверял его.
    Ответ написан
    Комментировать
  • Миграция фото из Picasa в Synology Photostation?

    Ichi
    @Ichi Автор вопроса
    Увлекаюсь программированием
    В DMS7 Synology обновили PhotoStation, он теперь больше похож на Google Photo.
    Ответ написан
  • Как получать тексты "Балабобы" через Python?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Летом надо было отправлять пустые куки. Сейчас же проверяется сертификат откуда пришел запрос, и отдается ответ только в случае доверенного хоста (Яндекс). Возможно прокатит вариант из cloudYandex
    Ответ написан
    Комментировать
  • Как запустить 5000 потоков параллельно с GET запросами?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Можно посмотреть phabel и есть стандартные средства многопоточности у php. Но на столько больших запросах я не проверял (у меня небольшой проектик с несколькими десятками запросов).

    Тут скорее всего лучше смотреть в сторону Python или Go. У них подобное гораздо лучше должно работать.
    Ответ написан
    Комментировать
  • Можно ли организовать централизованное управление ошибками в данном случае?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Можно же ловить отдельно определенные исключения, так же есть блок finally, который выполнится в любом случае.

    try {
        // код
    } catch (ICreateNewException $e) {
        echo 'Сработало исключения создания: ',  $e->getMessage(), "\n";
    } catch (Exception $e) {
        echo 'Поймано исключение: ',  $e->getMessage(), "\n";
    } finally {
        echo "Это я выполню всё равно";
    }


    чтобы так не писать каждый раз, можно создать функцию, в которую передавать callbak'ом функцию
    // это примерный код просто для визуального примера
    function ($callback, $args,$default)
    {
    try {
      $r = $callback($args);
    // or call_user_func(array($callback, $args))
    } catch (ICreateNewException $e) {
        echo 'Сработало исключения создания: ',  $e->getMessage(), "\n";
    return new NullObj;
    } catch (Exception $e) {
        echo 'Поймано исключение: ',  $e->getMessage(), "\n";
    mail(config('mail.to'))
    } finally {
        return $default;
    }
    }
    Ответ написан
  • С чего начать разработку под amoCRM?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Как вариант: создаем локальный виджет в АМО, а на сервере используем библиотеку. А там просто $amo = new Client и коды из виджета.
    Ответ написан
    Комментировать
  • Как получить id контакта из amocrm по известному номеру телефона?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Можно выполнить запрос вида GET https://example.amocrm.ru/api/v4/contacts?query=79...

    В ответе будет массив контактов (тут лучше перебрать массив и проверить custom_fields)
    Ответ написан
    Комментировать