Coder Social home page Coder Social logo

lab09's Introduction

Лабораторная работа №9

Задание

Реализовать краулера с использованием шаблона producer-consumer.

Краулер — программа, предназначенная для обхода страниц Интернета с целью получения из них необходимой информации.

Требования

  1. Программе на вход подаются следующие аргументы:
    • адрес HTML страницы --url;
    • глубин поиска по странице --depth;
    • количество потоков для скачивания страниц --network_threads;
    • количество потоков для обработки страниц --parser_threads;
    • путь до выходного файла --output.
  2. Программа должна рекурсивно обойти все ссылки встречающиеся на странице. Начальная страница обхода передается аргументом командной строки url. Глубина обхода равна depth.
  3. Программа должна записать в выходной файл output все ссылки на изображения, которые встречаются при обходе страниц.
  4. Необходимо использовать шаблон producer-consumer. Количество producer задается аргументом командной строки network_threads, а количество consumer - аргументом parser_threads.
  5. Для процессинга страниц необходимо использовать gumbo-parser.
  6. Для скачивания HTML страниц необходимо использовать Boost::Beast.
  7. Для обработки параметров командной строки необходимо использовать компонент boost::program_options.

Шаблон producer-consumer

Шаблон "producer-consumer" устроен по следующей схеме: producer-consumer

Этот шаблон часто применяется в высоконагруженных системах, распределенных вычислениях. Почти всегда можно абстрагировать задачу и выделить в ней части, которые делают некоторый препроцессинг, и части, которые занимаются окончательной обработкой данных на основе этого препроцессинга. Этот шаблон - это обобщение принципа подобного разделения.

Producer, или "поставщик", — это некоторый поток, который генерирует "задания" и складывает их в очередь.

Consumer, или "потребитель", — это поток, который обрабатывает "задачи" из очереди.

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

Рекомендации

  1. Используйте пул потоков. Например, ThreadPool.
  2. Все необходимые примеры по работе с gumbo-parser есть по ссылке.
  3. При решении задачи следует использовать шаблон procuder-consumer два раза, по следующей схеме: scheme

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.