Подскажите алгоритм создания файла с результатом парсинга сайта.

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 361
Благодарностей
8 647
Баллы
113
Есть задача спарсить сайт в многопоточном режиме работы, с выводом результата работы в файл, например с таким именем out-2016-22-05-15-46-34.xls (с временно'й меткой)..
С однопоточным режимом делаю в конце шаблона создание временно'й метки и прописываю ее в имя файла..
Но как быть при многопоточном режиме работы?
Каждый поток создает свою временну'ю метку и на выходе получается N количество файлов (каждый со своей временно'й меткой), равное кол-ву потоков, которое отработало парсинг..
Создавать временну'ю метку потоком, который раньше всех запустился, наверное не вариант, так как нужна метка, соответствующая времени окончания работы парсинга, а не началу..
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 605
Благодарностей
4 595
Баллы
113
пусть метка обновляется. поток закончил парсинг - проверяет наличие файла в каталоге. Если есть - добавляет содержимое своей переменной и переименовывает по своей метке. Если нет - создаёт
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
1) для каждого потока создать свой файл - после окончания работы объединять их
2) Пихать содержимое парсинга в список - а в конце работы записывать в файл
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 361
Благодарностей
8 647
Баллы
113
1) для каждого потока создать свой файл - после окончания работы объединять их
2) Пихать содержимое парсинга в список - а в конце работы записывать в файл
все равно мне непонятно пока что.. (алгоритмист из меня видимо фиговый :-))
1) как дать шаблону понять, что парсинг во всех потоках закончился и пора идти в ветку, где происходит объединение всех файлов в один?
2) так же, как дать понять шаблону что парсинг закончился во всех потоках и пора сохранять результат (список) в файл с временной меткой?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 361
Благодарностей
8 647
Баллы
113
пусть метка обновляется. поток закончил парсинг - проверяет наличие файла в каталоге. Если есть - добавляет содержимое своей переменной и переименовывает по своей метке. Если нет - создаёт
непонятно, сорри.. можно подробнее?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 605
Благодарностей
4 595
Баллы
113
ну у тебя есть out-2016-22-05-15-46-34.xls в каталоге OUT
Отрабатывает поток после чего проверяет, есть ли вообще какой либо файл в каталоге OUT. Если файл есть(в конкретном примере out-2016-22-05-15-46-34.xls), то мы его дозаписываем нашими новополученными данными и переименовываем, соответсвенно, под новую временную метку. Если такового файла нет - просто создаём новый с нашими данными и соовтетсвенным названием.
 
  • Спасибо
Реакции: Sergodjan

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 361
Благодарностей
8 647
Баллы
113
ну у тебя есть out-2016-22-05-15-46-34.xls в каталоге OUT
Отрабатывает поток после чего проверяет, есть ли вообще какой либо файл в каталоге OUT. Если файл есть(в конкретном примере out-2016-22-05-15-46-34.xls), то мы его дозаписываем нашими новополученными данными и переименовываем, соответсвенно, под новую временную метку. Если такового файла нет - просто создаём новый с нашими данными и соовтетсвенным названием.
ок, понял..
спасибо, буду пробовать..
 

baimkin

Client
Регистрация
04.08.2015
Сообщения
283
Благодарностей
111
Баллы
43
1) как дать шаблону понять, что парсинг во всех потоках закончился и пора идти в ветку, где происходит объединение всех файлов в один?
пусть при запуске каждый поток будет увеличивать заранее выбранную глобальную переменную на 1, в после завершения потока вычитывать на 1, и в конце так же проверять получилось ли значение изначально заданное глобальной перемене(пусть будет 0) если не получилось, то поток просто завершает работу, а вот если мы получили 0, значит все потоки как добавили, так и вычли значение 1 из глобальной переменной, и последний поток который произвел вычитание и получил значение 0 уйдет по ветке сохранения результата.
 
Последнее редактирование:
  • Спасибо
Реакции: Sergodjan

Markoni

Client
Регистрация
27.12.2018
Сообщения
62
Благодарностей
2
Баллы
8
ок, понял..
спасибо, буду пробовать..
Подскажите пожалуйста в чем может быть причина. Спарсил ID пользователей из сайта и это записалось в папку "Usres". Делал для теста сначало 1 выполнение. Спарсило около 45 кб пользователей и я этот файл не изменял и оставил как есть. Потом на следующий день запустил тот же парсер (в 3 потока 3 задания) с тою же директорией и тем же файлом тхт и в процессе парсинга увидел размер txt файла 140 кб примерно, а когда работа парсера закончилась, текстовый файл уменьшился примерно в 3 раза, как и было при первом запуске - 45 кб. Хотел уточнить, при таких действиях, а именно при втором запуске новые юзеры не дозаписываються в ранее спаршеный файл или они перезаписывают данные в файле?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 361
Благодарностей
8 647
Баллы
113
Подскажите пожалуйста в чем может быть причина. Спарсил ID пользователей из сайта и это записалось в папку "Usres". Делал для теста сначало 1 выполнение. Спарсило около 45 кб пользователей и я этот файл не изменял и оставил как есть. Потом на следующий день запустил тот же парсер (в 3 потока 3 задания) с тою же директорией и тем же файлом тхт и в процессе парсинга увидел размер txt файла 140 кб примерно, а когда работа парсера закончилась, текстовый файл уменьшился примерно в 3 раза, как и было при первом запуске - 45 кб. Хотел уточнить, при таких действиях, а именно при втором запуске новые юзеры не дозаписываються в ранее спаршеный файл или они перезаписывают данные в файле?
Точно пока сложно сказать что происходит, но судя по тому, что сначала файл толстеет, а потом снова худеет,
возможно просто парсятся дубли, а в конце выполнения эти дубли чистятся.
 

Markoni

Client
Регистрация
27.12.2018
Сообщения
62
Благодарностей
2
Баллы
8
Точно пока сложно сказать что происходит, но судя по тому, что сначала файл толстеет, а потом снова худеет,
возможно просто парсятся дубли, а в конце выполнения эти дубли чистятся.
Добавил еще кубик сохранить в другой файл (Parser.txt), он получился 266 кб, хоть и идет после удаления дублей, а основной список "User" - 89 кб

парс.png
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 361
Благодарностей
8 647
Баллы
113
Добавил еще кубик сохранить в другой файл (Parser.txt), он получился 266 кб, хоть и идет после удаления дублей, а основной список "User" - 89 кб

Посмотреть вложение 37874
Попробуйте снять эту галку. Видимо допись идет к данным с прошлых сеансов парсинга, поэтому этот файл у вас больше.
Лучше привязать файл к списку и убрать экшен Сохранить в файл и проводить полную очистку дублей. В том виде, что у вас сейчас, возможны дубли.

upload_2019-4-7_13-43-36.png
 

Markoni

Client
Регистрация
27.12.2018
Сообщения
62
Благодарностей
2
Баллы
8
Попробуйте снять эту галку. Видимо допись идет к данным с прошлых сеансов парсинга, поэтому этот файл у вас больше.
Лучше привязать файл к списку и убрать экшен Сохранить в файл и проводить полную очистку дублей. В том виде, что у вас сейчас, возможны дубли.

Посмотреть вложение 37875
Спасибо, уже разобрался. Скажите пожалуйста, а если в многопотоке работать, в список парсинга и в черный список, строки будут дозаписыватся не заменяя строки или надо создавать отдельные папки или директории для черного списка?
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)