Задать вопрос
Веду бложик: https://t.me/stackovernote, пишу на: python, django, php, symfony, postgresql, mysql
Контакты

Наибольший вклад в теги

Все теги (13)

Лучшие ответы пользователя

Все ответы (8)
  • Как сделать парсер крупных сайтов и маркетплейсов на 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/.

    Надеюсь я смог прояснить некоторые технические детали парсинга сайтов.
    Ответ написан
  • Взять предыдущий елемент массива?

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

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


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

    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 комментариев