5

Парсер для Лиги Дня Рождения

Недавно @Midzukawa опубликовал этот пост, а под ним этот комментарий:

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

Итак, уважаемый @Midzukawa, готов представить тебе мой парсер, написанный на коленке за 5 минут. Что он делает:

1. Имитирует нажатие "показать все комментарии" до тех пор, пока все из них не будет показаны

2. Распознаёт даты, в том числе названия месяцев

3. Выводит всё в файл

4. В случае ошибки выделяет этот коммент среди остальных в файле. Вот так:

Парсер для Лиги Дня Рождения

Итак, как его использовать:

1. Открыть, внимание, пост с новой версии Пикабу!

2. Открыть консоль (если у Вас Google Chrome, то нажать F12)

3. В консоли открыть вкладку "Console"

4. Вставить такой код:

var comments = document.getElementsByClassName("comment__content");
var more = document.getElementsByClassName("comments__more-button");
while(more[0].style.display != "none"){
more[0].click();
await new Promise(resolve => setTimeout(resolve, 2000));
}
var textToSave = "---PIKALOGGER[1]---\r\n";
for(var i = 0; i < comments.length - 1; i++){
var comm = comments[i].innerText.replace(/[^a-zA-Zа-яА-Я0-9 .:!?]/g, "");
textToSave = textToSave.concat(comm);
var numon = comments[i].innerText.replace(/[^0-9.]/g, "");
var dates = numon.split(".", 2);
var month = dates[1];
if(comm.toLowerCase().includes("январ") && (month == "" || month == undefined)){
month = "01";
} else if(comm.toLowerCase().includes("феврал") && (month == "" || month == undefined)){
month = "02";
} else if(comm.toLowerCase().includes("март") && (month == "" || month == undefined)){
month = "03";
} else if(comm.toLowerCase().includes("апрел") && (month == "" || month == undefined)){
month = "04";
} else if(comm.toLowerCase().includes("ма") && (month == "" || month == undefined)){
month = "05";
} else if(comm.toLowerCase().includes("июн") && (month == "" || month == undefined)){
month = "06";
} else if(comm.toLowerCase().includes("июл") && (month == "" || month == undefined)){
month = "07";
} else if(comm.toLowerCase().includes("август") && (month == "" || month == undefined)){
month = "08";
} else if(comm.toLowerCase().includes("сентябр") && (month == "" || month == undefined)){
month = "09";
} else if(comm.toLowerCase().includes("октябр") && (month == "" || month == undefined)){
month = "10";
} else if(comm.toLowerCase().includes("ноябр") && (month == "" || month == undefined)){
month = "11";
} else if(comm.toLowerCase().includes("декабр") && (month == "" || month == undefined)){
month = "12";
}
var possibleDate = "=========================================================================================================================Возможная дата: ???";
if(dates[0] != undefined && dates[0] != "" && month != undefined && month != ""){
var possibleDate = "====================================================================================Возможная дата: ".concat(dates[0]).concat(".").concat(month);
}
textToSave = textToSave.concat("\r\n").concat(possibleDate).concat("\r\n---NEWCOMMENT---\r\n");
}
var textToSaveblob = new Blob([textToSave], {type:"text/plain"});
var textToSaveurl = window.URL.createObjectURL(textToSaveblob);
var downlink = document.createElement("a");
downlink.download = "Pikabu-comments-parsed.txt";
downlink.href = textToSaveurl;
document.body.appendChild(downlink);
downlink.click();

5. Нажать Enter

6. Чуть подождать

7. К вам скачался файл с результатами

8. ???

9. PROFIT

Ну и да, я родился девятого августа)

1
Автор поста оценил этот комментарий

ну и костыли)

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Простите, JS я знаю уже целых 5 часов!

показать ответы
0
Автор поста оценил этот комментарий

я про то, что пикабу отдаёт комменты в более удобном для парсинга формате, а именно в JSON. Делаешь POST сюда https://new.pikabu.ru/ajax/comments_actions.php с параметрами


action:get_story_comments

story_id:5612720

start_comment_id:103983334

не забывая добавить хедер X-Requested-With:XMLHttpRequest

Он отдаёт last id, подставляешь его в следующий запрос и повторяешь, пока не завершится парсинг всех комментов.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

То есть, у Пикабу есть "API"?

показать ответы
0
Автор поста оценил этот комментарий

61.0

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Уууу..... Скачайте последнюю версию (у меня 63.0.3239.84)

0
Автор поста оценил этот комментарий
Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Какая у Вас версия Chrome?

показать ответы
0
Автор поста оценил этот комментарий

1. Открыть, внимание, пост с новой версии Пикабу!

2. Открыть консоль (если у Вас Google Chrome, то нажать F12)

3. В консоли открыть вкладку "Console"

4. Вставить такой код:

попробовал из поста и из гита

5. Нажать Enter

6. Чуть подождать

7. К вам скачался файл с результатами - .i.

Не могу вставить картинку со скрином, похоже хром с ума сходит...

http://images.vfl.ru/ii/1515268540/0a44ccbe/20044247.jpg

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Можно код чуть вверх поскроллить?
показать ответы
0
Автор поста оценил этот комментарий

рандомная страница https://new.pikabu.ru/story/zimniy_grach_5613082


текст с гита

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

У меня всё нормально (Google Chrome). Вы точно всё сделали по инструкции?

показать ответы
0
Автор поста оценил этот комментарий

не стоит. я выполнил все дейстивия. нету главного - ника

ТС, переделай. в идеале что бы парсер выдавал последовательно дату (по порядку) и ник. т.е.

01.01. nik1, nik2, nik3

02.01 nik4, nik5,...

это не то что бы приказ или негодование, просто если хочешь помочь - вот недостаток твоего кода (:

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо. Завтра займусь.

показать ответы
0
Автор поста оценил этот комментарий

ошибку выдает

Uncaught SyntaxError: Unexpected token new

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Весело. Попробуйте взять код отсюда:

https://gist.github.com/gsfci/72bfc2a993e124f0df9e87ba8827a0...

показать ответы
0
Автор поста оценил этот комментарий
Как человек, который знает js почти целый месяц, рекомендую в будущем использовать === и !===. Теоретически, тогда сравнение будут как в человеческих языках.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо

0
DELETED
Автор поста оценил этот комментарий
Ничего не поняла, но спасибо! Попробуем использовать, если разберемся, будет просто даром. Правда, спасибо :)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Если хотите, могу приделать ещё какой-нибудь костыль вроде приложения для компьютера

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества