Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как лучше реализовать очередь, обход всех страниц сайта 
V
    Опции темы
americanets
Дата 11.11.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



у меня есть функции 


получить код страницы

Код

void getHtmlResult ( char *url )
{
    CURL* curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, handle_data);
        CURLcode res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
            if (res == 0) {
                //std::cout << contents << std::endl;
            } else {
                std::cerr << "Error: " << res << std::endl;
            }
        }
}



вытащить все ссылки


Код

void parseUrl ( std::string html )
{
    //boost::regex expression("href=\"(.*?)\"");
    boost::regex expression("<\\s*A\\s+[^>]*href\\s*=\\s*\"([^\"]*)\"", boost::regbase::normal | boost::regbase::icase);
    if (boost::regex_split(std::back_inserter(values), html, expression))
    {
        //std::sort(values.begin(), values.end());
        std::vector<std::string>::iterator end = std::unique( values.begin(), values.end() );
        std::vector<std::string> uniqueValues(values.begin(), end);
        std::cout << " найдено " << uniqueValues.size() << std::endl;
        for (int i = 0; i < uniqueValues.size(); i++) {
            std::cout << uniqueValues[i].c_str() << std::endl;
        }
    }
    std::cout << "------------------------------------" << std::endl;
}



как лучше организовать очередь чтоб можно было обойти все страницы сайта ? 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Lycifer
Дата 11.11.2008, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



map[URL,flag] 
URL - уникальность линк страницы
flag - был там или еще нет, если то... если нет то...

А вообще в чём проблемма?
PM MAIL ICQ   Вверх
americanets
Дата 11.11.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



не могу понять как сделать чтоб после сканирования страницы он брал из списка следующую, сканировал + дополнял список, потом следующую и так пока не пройдет все страницы 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
powerfox
Дата 15.11.2008, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



americanets, что-то типа:
Код

Class Queue
{
public:
  Queue() : current = 0 {}
  void push(Item) {vec.push_back(Item); }
  Item pop() {current++; return vec[current-1];}  
private:
  vector<Item> vec;
  current;

Конечно, в pop() нужно проверять значение current и размер вектора.


--------------------
user posted image
PM WWW   Вверх
americanets
Дата 17.11.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



powerfox, спасибо , буду пробовать 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0496 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.