Русский ИТ бизнес 👨
Подписаться
AnyCrawl - это такой бодрый "швейцарский нож" для парсинга :)

Он умеет вытаскивать страницы поштучно, обходить целые сайты и при этом не умирать даже на больших объемах. Есть поддержка Google и других поисковиков, можно включить многопоточность и запускать задачи пачками. Плюс встроен ИИ для извлечения структурированных данных в JSON прямо со страниц.

Код открыт, лицензия MIT, технологии знакомые: Node.js, TypeScript, Redis. У проекта уже 1900 звезд на GitHub, 166 форков и 17 наблюдателей - явно не одинокая разработка.

Разработчики активно обновляют документацию и Docker-конфиги, добавляют поддержку прокси и движков для рендеринга JavaScript вроде Playwright и Puppeteer.

Отлична идея, замечу. Мы что-то подобное делаем, но медленно...

Русский ИТ бизнес

Комментарии (0)

  • Channel_Bot
    Давно пользуюсь BeautifulSoup4 для Python. Очень понятная и гибкая бибилиотека.
    Чем решение AnyCrawl лучше?
    • Ifrolove
      Так Макс просто пост сделал. Тут много такого)
  • dmitry236
    В документации ни слова про обработку robots.txt. Мы, например, у себя реализовали по схеме, похожей на логику поисковых ботов:

    1. Первый заход всегда на robots.txt
    2. Преобразуем правила в регулярки для обработки url, вынимаем правила в зависимости от поисковых систем, получаем все clean-param, sitemaps
    3. Получаем морду сайта и все внутренние страницы
    4. Определяем тип ссылки: internal, external, anchor, disallowed, allowed
    5. Кладем в базу в соответствии с типом

    В противном случае, если не чистить clean-param, UTM, не делать универсальный хэш для url (например со слешом и без на конце - считать за один url), не присваивать хаш урла по canonical, и пр. то вся эта индексация захлебывается, когда попадает на простые фильтры интернет-магазинов
    • Ut4J6
      есть магазины, которые потратили время на анализ лога, но не сделали проверку, что бот действительно поисковый?
      • dmitry236
        не совсем понял вопрос. Полагаю, что никто логи не анализирует, исходят из рекомендаций сеошников, когда есть посадочные страницы категорий, но внутри категорий может быть несколько десятков фильтров с GET параметрами, которые могут наплодить большое число ненужных страниц в индексе, поэтому фильтры или принудительно закрываются в robots через disallow (если в url есть подходящая конструкция), либо для передаваемых параметров задается clean-param и тогда поисковики просто игнорят эти GET параметры
        • Ut4J6
          а я с недосыпу подумал, что вы так мимикрируете под поисковый бот, чтоб не забанили за нарушение роботса

          если не чистить clean-param, UTM (а теперь ещё и erid для ru), не делать универсальный хэш для url (например со слешом и без на конце - считать за один url), не присваивать хэш урла по canonical
          и не сортировать оставшиеся параметры по алфавиту ...
          • dmitry236
            на нарушение роботса нам по большому счету плевать, главное не натащить себе в базу технических урлов, которые представляют собой просто фильтры/представления категории, иначе вместо 10-20 страниц листинга из которого ты получаешь ссылки на товары и цены, ты можешь затащить несколько тысяч страниц - лишнее время и наш краулинговый "бюджет"
            • Ut4J6
              если у страницы набор товаров (хеш сортированных id) совпал с уже существующим - такой урл не брать в базу, а ставить в блеклист
          • dmitry236
            насколько я помню у нас идет:

            1. Отсечение schema (одинаковый url с http и https будет иметь один hash)
            2. www/без www в зависимости от опции мягкости соблюдения хоста
            3. Убираются / , ? или # на конце url
            4. Убираются clean-param
            5. Строятся оставшиеся GET параметры по алфавиту
            6. Из полученной конструкции формируется murmur3_hash и он уже используется как уникальный _id
            • GroupAnonymousBot
              Монстры ебать вы
            • Ut4J6
              богато живете
              • dmitry236
                почему?
                • Ut4J6
                  шестнадцатибайтный хеш зачем?
                  • dmitry236
                    хз, мы подсмотрели в clickhouse, я в этом не слишком силен
                  • dmitry236
                    идея была в том, что он быстрее md5, но при этом коллизии на нашем числе url возникать не должны
                    • Ut4J6
                      очень сомнительно
                      • dmitry236
                        я не сравнивал, но в нескольких местах читал что быстрее
                        • Ut4J6
                          пиздеж скорее всего плюс если мурмур полностью пихать в индекс - то это точно медленнее, потому что это два long, а значт будет сортироваться и сравниваться медленнее
            • Ut4J6
              я помню еще назначал себе PTR типа 74-125-217-160.google.com. где разрешали в админке
              • dmitry236
                Некоторые ещё сверяются с IP адресами https://developers.google.com/search/apis/ipranges/googlebot.json
                • Ut4J6
                  да, но это только с гуглом, у яндекса и амазона нет таких списков, и там следует проверить прямой резолвинг по полученой PTR.
                  Яндекс указывает две AS и типа ищите ip сами, но не гарантируем.
                  В общем некоторые не заморачиваются списками ip и перепроверкой PTR