Многопоток в парсинге.



  • @romanbiz дело в том, что у меня таков алгоритм скрипта : БАС заходит на страницу / категорию?page=... После, по этомй категории проходит по страницам, в зависимости от их количества и парсит ссылку с каждого объявления на этой странице и записывает в файл. Потому и каждый поток, отработав свою ссылку, опять начинает повторять, может можно как то связать списки, что бы поток при сравнении понимал, что ссылка уже есть и брал другую? Я вообще не понимаю, как это можно реализовать. Возможно у Вас есть идеи?



  • @Bonifazzziy Использовать ресурсы. В настройках ресурса - 1 успешное использование, 1 - одновременно использивать. В многопотоке не будет никаких проблем. Многопоток - это использование ресурсов и правильная их настройка. Есть на форуме куча примеров, и розжовано от а до я.



  • @Bonifazzziy можешь так. Тебе нужно Создать ресурс -> Page к примеру. Дальше с помощью цикла FOR заполняешь его. Вот показываю примерный алгоритм. !

    2_1515704534381_bas3.png !

    Код для заполнения твоего ресурса пихаешь в функцию OnApplicationStart, чтобы он выполнялся только 1 раз при запуске программы. Цикл для парсинга, там последнюю цифру выставляй вроде 99999, всё равно когда ресурс закончится софт остановится.



  • Настройки ресурса Page 0_1515704662605_bas1.png



  • @seedgg said in Многопоток в парсинге.:

    правильная их настройка. Есть на форуме куча примеров, и розжовано от а до я.

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



  • @Cruzel промучался два дня. Большое спасибо Вам за участие. Однако, так и не понял саму структуру. Вот скрин скрипта - логика. Возможно Вы сможете мне подсказать именно на моём примере. Был бы Вам очень благодарен.0_1515878445058_Безымянный.jpg



  • @Bonifazzziy Можешь в функции onapplicationstart в 1 поток парсить ссылки с нужного количество страниц, добавляя их в ресурс, а уже в функции main обходить их в многопоточном режиме. Вот пример: 0_1515881176233_example.xml



  • Как в примере выше описано, так впринципе можно и сделать, но для лучшего понятия работы многопотока, можно сделать и без while - просто указать {{link}} и все последующие действия. Какая будет существенная разница между этим - с while и {{link|notreuse}} поток запускается и начинается обработка данных и поток не перегружаеться, с случаем без while поток возьмет с ресурса 1 единицу данных, обработает, и перезапустится, потом возьмет новую и т.д.
    Можно так же все организовать без onapplicationstart - это в мейне организовать сбор ссылок, а потом запустить многопоточную функцию - далее все по схеме.
    Главное помнить, что информация в многопотоке передается либо через глобальные переменные либо через ресурсы.



  • @santilo огромное Вам спасибо!!!!!!!!!!!!!!! Огромнейшее!!! Спасибо, что не остались безучастным и потратили на меня своё время. Скрипт работает на отлично. Теперь на этом примере я постараюсь разобраться более детально, что и как взаимодействует. Ещё раз огромное Вам спасибо!))))



  • @seedgg спасибо за подробное объяснение, буду пробовать и разбираться. Главное, что появился пример хороший. Есть от чего отталкиваться.



  • @Bonifazzziy смотрите, идея того алгоритма, который я предложил:

    1. В функции OnApplicationStart происходит заполнение ресурса Page нужными номерами страницы. К примеру нужны нам с 1 по 10 страницу. С помощью цикла FOR с 1 до 10 мы добавляем в ресурс такие элементы: 1, 2 , 3 ,4 , 5 и т.д.
    2. Потом мы уже в цикле, где парсятся данные (где у вас идёт блок Загрузить, и т.д.) в адресе страницы указываем http://site.ru/users?page={{Page|notreuse}} ну или по другому, смотря какая у вас именно ссылка. Ресурс выдаёт вам номер страницы, и эти страницы не будут повторяться между потоками.
    3. Вы получаете нужные данные в многопотоковом режиме.

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


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.