@Dodok Не следует делать неверные выводы.
Я ранее создавал ботов для многих блокчейн-игр, таких как AlienWorld, Splinterlands, Farmer World и многих других.
Поэтому, если вы никогда не использовали BAS для игр, это не означает, что он не может справиться.
Поэтому нужно выяснить, в чем проблема.
Как сделать многопоточный парсинг (объясните простыми словами, пожалуйста)
-
Дорос до многопоточного парсинга.
Но не знаю, как он работает.У меня есть скрипт, который парсит странички сайта example.com.
Странички имеют такой адрес:
example.com/1
example.com/2
...
example.com/10000Я создал массив с цифрами от 1 до 10 000 (чтобы перебрать все странички с 1ой по 10 000ую).
Скрипт берёт первый элемент массива (1), собирает адрес странички, загружает страничку, парсит данные, записывает в файл.
Затем срипт берёт второй элемент массива (2) и делает аналогичные действия.Вопросы:
- Бесплатная версия позволяет работать в многопоточном режиме?
- Как модифицировать скрипт, чтобы парсинг работал в многопоточном режиме?
Я так понял, что каждый поток должен взять определённый диапазон адресов страничек (например с 1 по 500, с 501 по 1000 и т.д.) и распарсить его. Но как потоки поймут, что:
- Нужно брать цифры именно из моего массива
- Какой диапазон брать (какие уже взяты соседними потоками)
- Все потоки должны записать результат парсинга в один .txt файл, лежащий на локальном диске. Что произойдёт, если один поток будет писать данные в файл (допустим 20 милисекунд) и в это момент другой поток тоже попытается записать данные в файл? Второй поток завершится с ошибкой? Запись не произведётся? Или ещё какие-то варианты?
-
Если url отличается только числом, то можно получить у каждого потока [[THREAD_INDEX]] в "Статистика скрипта".
Далее можно запустить цикл через For и чтобы каждый поток брал свои страницы, то нужно все это умножать на [[THREAD_INDEX]]
Как вариант установить границы для цикла Forот ([[THREAD_INDEX]]-1)*10000+1 до [[THREAD_INDEX]]*10000При данной логике каждый поток будет обрабатывать по 10000 вариантов
Также можно вручную поделить диапазоны и расписать их в txt файле и "Парсить строку"
0;100000 100001;200000 200001;300000 и т.д -

И чтобы лучше разобраться, то нужно посмотреть видео
-
@tet-vivi said in Как сделать многопоточный парсинг (объясните простыми словами, пожалуйста):
@GameBot из-за разницы выполнения некоторые потоки будут простаивать вконце
Чтобы этого избежать можно тупо взять и загнать в файл с 1 до последнего нужного нам id. Далее создать ресурс из файла.
Единственная проблема: что делать если требуется спарсить более миллиона страниц? -
использовать бд.
можно пачками получать набор ид которые еще не обработаны.
опробовано на практике.(~15 миллионов ид/страниц)
можно на асинхронных функциях в цикле.
текущий N и запуск новых M. и при интеграции N = N + M.
Чтобы этого избежать можно тупо взять и загнать в файл с 1 до последнего нужного нам id. Далее создать ресурс из файла.
если не критично, можно исключить работу с файлом. А сразу создать ресурс и загнать туда набор ид.