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
Автор поста оценил этот комментарий

ну и костыли)

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

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

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

отдельных плюсцов тебе от меня за такое

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, подставляешь его в следующий запрос и повторяешь, пока не завершится парсинг всех комментов.

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

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

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

Я про десктопную версию, она делает именно такой запрос, как я описал выше(посмотреть можно во вкладке Network(ctrl + shift + I в хроме).

А вообще есть мобильный, но там тебе придётся долго морочиться с разгадыванием алгоритма подписи запросов, открытого API, как в vk или telegram тут нет, увы.

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

P.S. ещё Origin:https://new.pikabu.ru

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

Спасибо

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества