• Где можно хорошо выучить js самостоятельно?

    dbkv
    @dbkv
    backend developer
    > Где можно хорошо выучить js самостоятельно?

    В любом редакторе кода и браузере. На самом деле все, что вам нужно:

    1. Желание
    2. Цель
    3. Документация

    Ну а если нужна конкретика, то https://roadmap.sh/frontend.

    На счет остального - решает опыт, опыт, опыт.
    Ответ написан
    Комментировать
  • Как сделать парсер крупных сайтов и маркетплейсов на PHP, обходящий блокировки?

    dbkv
    @dbkv
    backend developer
    Подскажите, что именно стоит изучать, на что акцентировать внимание, какие библиотеки использовать, чтобы создать желательно быстрый парсер маркетплейсов на PHP?

    Зависит от ваших текущих знаний. Написать парсер сайтов можно на любом языке программирования, при желание. Удобнее всего, на мой взгляд сделать это на Python с использозованием библиотеки -- https://www.crummy.com/software/BeautifulSoup/bs4/doc/ либо на NodeJS.

    Посоветуйте,какой стек использовать, что почитать и изучить, чтобы реализовать следующий функционал:

    Python / Request / BeautifulSoup4 либо NodeJS / Axios / node-html-parser. Если осмелитесь писать на PHP, что на мой взгляд крайне не удобно, то guzzle + phpQuery, как вы уже сами и написали.

    Также, сейчас на многих сайтах используется технология SPA и клиентский рендеринг. Если в кратцы - то контент на сайт подгружается через API и рендерится с помощью JS. Если в тупую обратиться к такому сайту с сервера (например через curl), то с высокой долей вероятности мы получим пустую страницу.

    Для таких сайтов нужно использовать эмуляторы браузеров, например seleniumhq.org или https://pptr.dev/. Биндинги есть на Python и NodeJS, возможно и на PHP.

    можно ли будет использовать парсер от Python на PHP сайте?

    Да, можно просто написать API на Python и поднять сервис на отдельном поддомене или порту, а далее в JSON-формате возвращать данные на сайт и делать с ними дальнейшие операции.

    На счет обхода блокировок. Стоит сказать сразу, что блокировки будут всегда, поэтому при разработке парсера надо обязательно предусмотреть следующее:


    1. Каждый запрос рандомизируем заголовки (request headers) и User-Agent. Обязательно. Тут без вариантов.

    2. Делаем запросы исключительно через proxy + каждый запрос рандомизируем их. В идеале иметь пулл из ~20 проксей. Крайне желательно чтобы прокси были приватными.

    3. Если уперлись в капчу, то делаем повторный запрос с другой прокси, если сайт ни в какую не хочет нас пускать к контенту, то разгадываем капчу. Либо реализуем разгадывание руками пользователя (т.к у вас интерфейс есть), либо с помощью любого сервиса разгадывания капчи, типа https://capmonster.cloud/ru/ или https://rucaptcha.com/.

    Надеюсь я смог прояснить некоторые технические детали парсинга сайтов.
    Ответ написан
  • Яндекс-метрика в админ-панели wp - как добавить html-код?

    dbkv
    @dbkv
    backend developer
    Какие цели установки метрики в админку? Зачем мониторить просмотры и заходы? На мой взгляд лучше поставить логирование действий в админке. Наверняка есть такие плагины в свободном доступе.
    Ответ написан
    Комментировать
  • Как работать с параметризированными запросами и именнованными параметрами?

    dbkv
    @dbkv
    backend developer
    https://www.psycopg.org/psycopg3/docs/basic/params...

    cur.execute("""
        INSERT INTO some_table (id, created_at, updated_at, last_name)
        VALUES (%(id)s, %(created)s, %(created)s, %(name)s);
        """,
        {'id': 10, 'name': "O'Reilly", 'created': datetime.date(2020, 11, 18)})


    p.s для PostgreSQL
    Ответ написан
    8 комментариев
  • Как запретить несколько вопросов в url?

    dbkv
    @dbkv
    backend developer
    Попробуйте так,

    RewriteCond %{THE_REQUEST} \?\?([^\s]+) [NC]
    RewriteRule (.*) %{REQUEST_URI}?%1 [NE,R=301,L]
    Ответ написан
    Комментировать
  • Взять предыдущий елемент массива?

    dbkv
    @dbkv
    backend developer
    Если известен индекс текущего элемента, то просто:

    let arr = ["a", "b", "c", "d"];
    let idx = 1;
    let current = arr[idx]
    let prev = arr[idx - 1]


    Если нет, то в любом случае нужно будет получить индекс текущего элемента.
    Ответ написан
    4 комментария
  • Как подключить прокси на языке python для телеграмм?

    dbkv
    @dbkv
    backend developer
    Не плохо бы в вопросе прилагать исходный код...

    В официальной документации Telethon есть пример с использованием прокси: https://docs.telethon.dev/en/stable/basic/signing-...

    Описание значений кортежа proxy, тут можно посмотреть https://github.com/Anorov/PySocks#usage-1

    Если проксей несколько планируется использовать, то можно создать список кортежей с разными проксями и при авторизации выбирать случайную прокси и передавать в параметр proxy одно из значений списка.

    Например так можно выбирать рандомно:

    from random import choice
    
    proxies = [
        (1),
        (2),
        (3),
    ]
    
    proxy = choice(proxies)
    
    print(proxy)


    Ну и в комментариях верно написали, если аккуант один, то прокси не помогут. Нужно использовать несколько аккуантов и авторизировать их с разных прокси. Тогда вероятность блокировки будет ниже.
    Ответ написан
    Комментировать