Форум сайта python.su
Весь исходник. Это первая моя программа на питоне. Что бы воспользоваться, сделайте на сайте выборку вакансий по 2м критериям: 1.для Минска, 2. за последние сутки. Выделив адресную строку, скопируйте её в буфер (CTRL+C). После этого запустите этот скрипт и когда он попросит, введите цифру один. Так я сделал интерактивный ввод URL. Замечания писать не надо, я и сам знаю, что много огрехов. А вот за улучшающий код буду благодарен.
Да, сейчас стоит ограничение на две страницы. Поправьте здесь # for i in range(1,LastPage):
Сам спросил, сам и отвечу. Каждая строка csv-файла — это одна строка таблицы Т.е. у меня между данными, разделенными “;” внутри поля (данных) есть символ новой строки, соответственно после него данные помещаются в первый столбец и вся таблица рассинхронизируется. Еще рекомендую к прочтению статью “Редактируем CSV-файлы, чтобы не сломать данные”. Узнал для себя много нового.
Парсинг контактных данных(телефонов) пока не реализован, т.к. они формируются Ява скриптом, т.е. в готовом виде в карточке вакансии нет.
Долго матерился пока наконец-то не узнал, что pip install для Установки библиотек запускается не из питона, а из CMD.exe.
Исправил формирование полей CSV-файла. Теперь открывается в Экселе нормально (через данные-импорт). Но я теперь открываю в другой программе CSVed.exe.
P.S. Профи прошу не смотреть исходник, т.к. вас может стошнить.
# форматировать код Ctrl + Alt + L # установить символ комментария Ctrl + / # Alt+Enter, чтобы просмотреть список возможных исправлений # сохраняйте HTML-файл локально, чтобы протестировать его несколько раз # иначе сайт может заблокировать # Прежде чем парсить данные "супом", нужно проверять, доступны ли они # при отключенном JavaScript. Когда недоступны, открываем браузером # Выход - использовать Selenium webdriver. # https://parsemachine.com/articles/urok-1-pishem-parser-kataloga-tovarov-na-python/ # https://vc.ru/newtechaudit/109368-web-parsing-osnovy-na-python # https://pythonru.com/biblioteki/parsing-na-python-s-beautiful-soup # https://istories.media/workshops/2021/09/10/parsing-s-pomoshchyu-python-urok-1/ # https://evilinside.ru/parsing-sajtov-na-python-podrobnyj-videokurs-i-programmnyj-kod/# # Тэг, в общем случае, - это многострочная строка, коллекция строк # начинающаяся с символа <. Внутри тэга может быть много дополнительной информации # подключаю необходимые библиотеки import requests # что бы Получить HTML-код по URL-адреса from bs4 import BeautifulSoup, __version__ # парсер HTML from fake_useragent import UserAgent # генерация правдоподобных юзер-агентов import pyperclip # для работы с буфером обмена import time # для правдоподобных задержек import re # регулярка import csv # для работы с csv файлом # функция чтения HTML-файла (.txt????) def write_to_fileTXT(HTML_page): # запись в файл. try: with open("HTML_page.txt", "a") as fopen: # Open the txt file. txt_open = writer(fopen) txt_open.writerow(HTML_page) except: return False # функция записи списка в текстовый csv-файл (открывается экселем) def write_to_csv(list_date): ''' запись спарсенных данных в CSV файл. В Windows 'b', добавленный к режиму, открывает файл в двоичном режиме, поэтому существуют также такие режимы, как 'rb', 'wb' и 'r + b'. Python в Windows проводит различие между текстовыми и двоичными файлами; символы конца строки в текстовых файлах автоматически слегка изменяются при чтении или записи данных. Это скрытое изменение данных файла подходит для текстовых файлов ASCII, но оно приведет к повреждению двоичных данных, подобных тем, что содержатся в файлах JPEG или EXE. Будьте очень осторожны, используя двоичный режим при чтении и записи таких файлов. В Unix не повредит добавить 'b' к режиму, чтобы вы могли использовать его независимо от платформы для всех двоичных файлов. ''' try: # newline = '' что бы не было пустыхустых строк через одну запись with open("allvacancy.csv", "a") as fopen: # Open the csv file. csv_writer = csv.writer(fopen, delimiter = ";", lineterminator="\r") # delimiter- для разделения полей.По умолчанию это',' # lineterminator = "\r"-Это разделитель между строками таблицы, по умолчанию он"\r\n" csv_writer.writerow(list_date)# запись по одной строке # csv_writer.writerows(list_date) except: return False # запрашиваем данные с сервера (сайта) # Внимание! проверки нужно делать на каждом запросе/поиске!!! # Если сервер ответил <Response [200]>, тогда продолжаем def response_UserAgent(URLx): """ получаю URL (ссылку на нужный объект сайта) НАДО!!!прикидываюсь браузером (человеком за ПК) получаю ответ сервера (сайта) возвращаю ответ, который надо потом проверить """ # запрашиваем данные по ссылке response = requests.get(URLx, headers={'User-Agent': UserAgent().chrome}) if response.status_code == 200: return response # else requests.ConnectionError: else: print("50_def check_response: response(otvet) <> 200. Quit") return None # quit() # проверить список на непустоту def check_list(list): if list == []: print('72_def check_list: list is [] empty. quit()') quit() else: print('75_def check_list: list is not empty') # перевожу в суп содержимое переданной страницы def getsoup(ResponseX): """ возвращаю soup """ # получаем содержимое страницы и переводим в суп response_html = ResponseX.content # response_text = ResponseX.text # есть несколько парсеров: html.parser,lxml # soup = BeautifulSoup(response_html, 'html.parser') soup = BeautifulSoup(response_html, 'lxml') return soup # выберем режим ввода информации в программу: # 1-URL из буфера обмена # 2-HTML-файл с диска def InputURL(): Mode = int(input("select Mode. 1-input with clipboard, 2 -input with file:")) while True: try: if Mode == 1: inp_clipboard = pyperclip.paste()# вставляем URL из буфера обмена # pyperclip.copy(s) print('104_return inp_clipboard='+inp_clipboard) return inp_clipboard elif Mode == 2: # with open ('ффф.html','r',encoding='utf-8') as f: print('107_open (ффф.html1)') return '' except Exception: print("90_Clipboard is empty(bufer obmena pustoy).") return '' # ============ Начало программы ============ # изменилась структура. 28.11.2022 Сейчас сохранён url 2-й страницы, что бы видеть всю структуру запроса url = 'https://praca.by/search/vacancies/?page=2&search[cities-radius][%D0%9C%D0%B8%D0%BD%D1%81%D0%BA]=1&search[query-text-params][headline]=0&upped_period=1' # 13.11.2022 # url = 'https://praca.by/search/vacancies/?upped_period=1&search[city][%D0%9C%D0%B8%D0%BD%D1%81%D0%BA]=1' baseURL = 'https://praca.by/search/vacancies/?' pageURL = 'page=' EndURL = '&search[cities-radius][%D0%9C%D0%B8%D0%BD%D1%81%D0%BA]=1&search[query-text-params][headline]=0&upped_period=1' __version__ # заремировал, что бы работать с файлом с диска, а не сайтом # Запрос URL из буфера обмена url1= InputURL() if url1 == '': url1 = InputURL() #EndIf # проверяю, будет ли отработан запрос по этому урлу R1=response_UserAgent(url1)# ответ на запрос # Метод get библиотеки requests возвращает объект Response, # а не какой-то там html # s_Text=requests.get(url1).text # print(s_Text) if R1.status_code == 200: print("115_response(otvet)= Ok-> soup") else: print("117_ response(otvet) <> 200. Quit(vihod)") quit() # ResponseText показал, что есть 2432 строки, но раскрывать не стал # загружаю исходный текст полученной страницы в парсер BeautifulSoup 'lxml' # и создаю Первый его объект soup soup_root=getsoup(R1) # ===== для тестов открываю заранее сохраненный файл==== # with open ('ффф.html','r',encoding='utf-8') as f: # with open('ффф.html','r',encoding='utf-8') as fp: # soup_root = BeautifulSoup(fp, 'lxml') # soup это ПОЧТИ тот же response.content # У soup совсем другие методы работы с HTML кодом # можно бродить по вершинам (Чего?), указывая путь из тегов # soup.Tag1.Tag2.Tag3 (soup.html.head.title) # можно получить значение из места, на которе указали # soup.Tag1.Tag2.Tag3.text # Создал Переменные для названий тэгов и классов, что бы лучше # понимать работу методов soup, который использует # НЕ символы/строки, а ТЭГИ и дочерние атрибуты (КЛАССЫ CSS) NameTagDiv = 'div' NameTagLi = 'li' NameTagUl = 'ul' ClassNamePageIt = 'pagination__item' ClassNamePageLst = 'pagination__list' # в HTML (soup)нахожу блок/таблицу/элемент 'div', в котором # находятся строкИ кода по выбору найденных страниц (кнопки) # buttons = soup.find('ul', class_ = 'pagination__list') # print(buttons) # но можно и по другому: найти ВСЕ строки с тегом 'li' и классом = 'pagination__item' # objlistPages = soup.find_all('li', class_ = 'pagination__item') # возврашается Тип ОБЪЕКТ (список???). # "правильный" синтаксис для понимания soup.find: objlistPagesSoup = soup_root.find(NameTagUl, attrs={"class": ClassNamePageLst}) # Если ругается AttributeError: 'NoneType' object has no attribute... # то можно посмотреть командой print(type(objlistPages)) # Проверка, что ответ/список не пустой check_list(objlistPagesSoup) # что отобразит команда objlistPagesSoup.text не обёрнутая в print()? # '\n\n←123456789...→' не очень понятно # а вот так понятней: print(objlistPagesSoup.text) # ←123456789...→ так выглядит в браузере список страниц # Получить последний элемент списка. индекс=-1 [-1], # т.е. первый сзади. # Последняя страница (LastPage) в выданном результате LastPage1 = objlistPagesSoup.find_all('li', class_='pagination__item')[-1] # проверим список на непустоту check_list(LastPage1) # <li class="pagination__item"><a href="?page=45&upped_period=1&search[city][%D0%9C%D0%B8%D0%BD%D1%81%D0%BA]=1"><i class="mdi mdi-fast-forward"></i></a></li> # Теперь надо узнать какая это страница (?page=45) из содержимого Page = LastPage1.find('a') Page # [<a href="?page=45&upped_period=1&search[city][%D0%9C%D0%B8%D0%BD%D1%81%D0%BA]=1"><i class="mdi mdi-fast-forward"></i></a>] # Теперь вычленю цифру ?page=45. # Тип soup конвертирую в тип строка и ищу по строке = и разделяю по ней PageStr = str(Page.find).split('=') PageStr3 = PageStr[2] PageStr3 # '49&search[cities-radius][%D0%9C%D0%B8%D0%BD%D1%81%D0%BA]' Page4 = PageStr3.split('&') Page4 # ['49', 'amp;search[cities-radius][%D0%9C%D0%B8%D0%BD%D1%81%D0%BA]'] Page5 = Page4[0] Page5 # '45' LastPage = int(Page5) print('LastPage=',LastPage) NameTagA = 'a' ClassNameVac = 'vac-small__title-link' SleepPages=2 #задержка чтения страниц SleepKartochek=1 #задержка чтения карточки вакансии write_to_csv(["Вакансия", "Зарплата", "Наниматель", "Город", "МестоРаботы", "РежимРаботы", "ПолнЧастЗанятость", "ОпытРаботы", "Образование", "ОписаниеРаботы", "МестоРаботы", "URL_вакансии"]) # for i in range(1,LastPage): # боевой код for i in range(1, 2): # для отладки. только 1 страница time.sleep(SleepPages) #задержка чтения страниц # собираю полный URL (запрос) с указанием нужной страницы url_gen = baseURL + pageURL + str(i) + EndURL # запрос к сайту за страницами с вакансиями Resp_v = response_UserAgent(url_gen) # ответ на запрос print('*************************************204 i=',i) # проверка ответа if Resp_v.status_code == 200: print("207_response(otvet)= Ok-> soup") else: print("209_response(otvet) <> 200. Quit(vihod)") quit() soup_v = getsoup(Resp_v) # soup2 = BeautifulSoup(resp.content, 'lxml') # все вакансии(ссылки) выбранной(i) страницы vacansii_on_page = soup_v.find_all(NameTagA, attrs={"class": ClassNameVac}) # vacansii check_list(vacansii_on_page) # print(vacansii) # одна из строк <a class="vac-small__title-link" href="https://praca.by/vacancy/497531/" target="_blank">Повар</a> # 1 надо вычленить url, что бы пройти по нему и получить доп информацию # 2 отсюда могу взять название вакансии # переменные для парсинга карточки вакансии NameTagh1 = 'h1' ClassNameKart = 'no-margin-top no-margin-bottom' NameTagDiv = 'div' ClassNameSalary = 'vacancy__salary' n = 0 for k in vacansii_on_page: time.sleep(SleepKartochek) # задержка чтения карточек # значение атрибута href, т.е ссылка на карточку вакансии url_Kartochki = k.attrs["href"] name_vac = k.string print('262 ---------------Kartochka-----------') print('263_name_vac', name_vac) # запрашиваю карточку вакансии с сайта # resp = requests.get(url_Kartochki) Resp_k = response_UserAgent(url_Kartochki) # проверка ответа if Resp_k.status_code == 200: print("256_response(otvet)= Ok-> soup") else: print("258_response(otvet) <> 200. Quit(vihod)") quit() soup_k = getsoup(Resp_k) Kartochka = soup_k.find(NameTagh1, attrs={"class": ClassNameKart}).text.strip() print(Kartochka) # Зарплата +дополнительные условия if (soup_k.find(NameTagDiv, attrs={"class": "vacancy__salary"}) != None): salary = soup_k.find(NameTagDiv, attrs={"class": "vacancy__salary"}).text.strip() # print('275', salary) else: salary = '' print('302********************* Зарплата не указана') # Обязанности if (soup_k.find(NameTagDiv, attrs={"class": "description wysiwyg-st"}) != None): description = soup_k.find(NameTagDiv, attrs={"class": "description wysiwyg-st"}).text.strip() description = description.replace("\r", "") description = description.replace("\n", "") # Заменить перевод строки и лишние пробелы # description = Repl(description) # print('275', description) else: description = '' print('311********************* Обязанности не указаны') # Адрес работы if (soup_k.find(NameTagDiv, attrs={"class": "job-address"}) != None): job_address = soup_k.find(NameTagDiv, attrs={"class": "job-address"}).text.strip() # print('275', job_address) else: job_address = '' print('319********************* Адрес работы не указан') firma = soup_k.find('div', attrs={"class": "vacancy__org-name"}).text.strip() # print(firma) # город <div class="vacancy__city">Минск</div> city = soup_k.find('div', attrs={"class": "vacancy__city"}).text.strip() # print('288', city) all_harakt = soup_k.find_all('div', attrs={"class": "vacancy__item"}) #.text.strip() aaa=[] for elem in all_harakt: aa = [elem.text.strip().split('\t')[-1]] aaa.append(aa) # print(*aa, sep='\n')#* Распаковывает итерируемый объект в аргументы функции region1=aaa[0]# На территории работодателя # преобразую элемент списка в строку и применяю к ней strip() # иначе получаю в виде ['Минск'] region=" ".join(map(str,region1)).strip() time_work1=aaa[1]# Фиксированный / полный рабочий день time_work = " ".join(map(str, time_work1)).strip() full_partial_load1=aaa[2]# Полная full_partial_load = " ".join(map(str, full_partial_load1)).strip() experience1=aaa[3]# Опыт работы от 1 года experience = " ".join(map(str, experience1)).strip() education1=aaa[4]# Высшее образование education = " ".join(map(str, education1)).strip() # print(*time_work, sep='\n') n = n + 1 print('309 page=', i, 'nom kartochki=', n, 'SleepKartochek=',SleepKartochek,'SleepPages=',SleepPages) print('==========================================================') # Описание работы,description # Место работы,job_address # URL_вакансии write_to_csv([Kartochka, salary, firma, city, region, time_work, full_partial_load, experience, education, description, job_address, url_Kartochki])
Отредактировано 123ksn (Ноя. 29, 2022 20:53:28)
Прикреплённый файлы:
allvacancy.csv (9,0 KБ)
Офлайн
123ksnЭто что такое?
Исходник парсера вакансий с praca.by в csv-файл . Excel коряво открывает csv. В блокноте проблем не вижу. Решил сам.
>>> 'бЮЙЮМЯХЪ'.encode('koi8-r').decode('cp1251') 'Вакансия' >>>
трудовой отпуск 30 календарных дней
Минск
2 мин. от станции метро пл. Победы.
оговаривается при собеседовании.
Отредактировано py.user.next (Ноя. 30, 2022 00:03:54)
Офлайн
py.user.next
Это что такое?
>>> ‘бЮЙЮМЯХЪ’.encode('koi8-r').decode('cp1251')
'Вакансия'
>>>
Не, даже после перекодирования он всё равно неправильно собран.
Это вот разные значения из столбца B
123ksnНа сегодняшний момент меня такой вариант устраивает. Так же я с Вами нигде не спорил и не говорил, что Вы не правы в своих нравоучениях. Правы, правы, правы! Да, если будет свободное время, я немного “допилю” явные косяки, а может и нет, если быстро найду новую работу.
P.S. Профи прошу не смотреть исходник, т.к. вас может стошнить.
py.user.nextЯ никогда не говорил, что я не собираюсь учиться. Я говорил, что не собираюсь учиться питону на профессиональном уровне (для трудоустройства). Мне скоро 60 и я всю жизнь учусь и делаю это для удовольствия. Мне нравится быть инженером широкого профиля, а не узким профильником.
Так-то ты говоришь, что не собираешься учиться, но деятельность вся твоя идёт так, что ты собираешься учиться. Вот эти все лазания по форумам об этом всём и говорят. Если тебе это не надоело делать, то ты учишься фактически уже.
Офлайн
А зачем вы сюда выложили? Это не законченное творение да и к тому же кривое.
Разве я могу взяв ваш код ипортировать его как модуль и использовать в своих целях?
Нет!
Раз оно уже получило данные с сайта то наверное и представить их нужно как то либо в екселе либо в пдфе либо на почту отправить в читабельном юзервиде
Копировать и вставлять урл? МОветон - зачем тогда писать код - он должен сам брать и делать что нужно а не кликать
А если нужна критика так есть такой сайт - говнокод называеться
Он как раз для этого
Офлайн
123ksnЭто из твоего файла. Он неправильно закодирован. Кодировать надо всё в кодировку utf-8. Чтобы в питоне кодировать в utf-8, надо файл открывать, указывая ему кодировку через параметр encoding. Соответственно, если ты не кодируешь в utf-8, то при появлении какого-нибудь символа в данных, которые кодировка koi8-r не может кодировать, возникнет ошибка кодирования и скрипт упадёт. А кодировка utf-8 кодирует все символы, которые есть в Unicode.
Я не знаю, как Вам удалось получить такой результат.
123ksnА ты думаешь, что я тебе про работу питонщиком говорю? Я тебе говорю о том, что, чтобы это всё получалось делать, нужно это всё знать. А чтобы это всё знать, надо этому всему учиться. Не будешь учиться - не будешь знать. Не будешь знать - не будет получаться. Работы тут вообще даже близко никакой нет. Речь идёт о навыках элементарных.
Я говорил, что не собираюсь учиться питону на профессиональном уровне
123ksnНу, то есть ты хочешь сказать, что до шестидесяти дожил и совершенно ничего не умеешь. Там по чуть-чуть, тут по чуть-чуть, так годы и прошли. Ну, теперь поздно что-то менять. Старики у нас тут были, ну, и чем это заканчивалось? Да ничем. Питон требует трёх лет для вхождения. Это, знаешь, дело даже не в питоне, а в том, что это первый твой язык программирования. То есть тебе вместе с питоном надо будет изучать так же впервые все элементы из теории программирования. Профессионал-то выучит язык питон быстро и будет почти сразу на нём писать всё. А вот новичок, который новичок не в питоне, а вообще в программировании, будет учить три года питон. Потому что всё время будет уходить на изучение обычных вещей вроде алгоритмов, псевдокода, сортировок, массивов, файлов, кодировок (как в твоём случае ) и так далее, - это всё то, что к питону вообще не относится. Это просто надо знать ещё до питона.
Мне скоро 60 и я всю жизнь учусь и делаю это для удовольствия. Мне нравится быть инженером широкого профиля, а не узким профильником.
Отредактировано py.user.next (Ноя. 30, 2022 23:43:32)
Офлайн
py.user.nextpy.user.next? Отвечу Вам мудростями. 1)Не судите по себе. Это я к тому, что я умею всё, но не на 100%. Если мне надо, я могу очень быстро нарастить свои знания почти в любой области. Вам этого не понять.
Ну, то есть ты хочешь сказать, что до шестидесяти дожил и совершенно ничего не умеешь. Там по чуть-чуть, тут по чуть-чуть, так годы и прошли. Ну, теперь поздно что-то менять. Старики у нас тут были, ну, и чем это заканчивалось? Да ничем. Питон требует трёх лет для вхождения.
Отредактировано 123ksn (Дек. 2, 2022 21:05:08)
Офлайн
123ksnВот у тебя у самого какие-то проблемы с этим. Ты приходишь на форум и начинаешь всем втирать, какой ты замечательный. Когда тебе говорят “дядь, а не пойти бы тебе к кому-нибудь там другому и в жилетку поплакать где-нибудь в другом месте? что ты нам-то втираешь про себя? ты думаешь, ты кому-то здесь упал вместе со всей своей жизнью?”, ты начинаешь обижаться, как ребёнок какой-то тупой. Ну, типа, знаешь, как когда у людей начинается старческое слабоумие, они резко становятся никому не интересны и из-за этого они начинают активно привлекать к себе внимание в стиле “ой! а я заболел! смотрите, чо у меня тут!”. Но это не помогает и в итоге мы получаем непрерывное нытьё “смотрите на меня! смотрите на меня!”. Да ты не нужен никому, всё, давай, до свидания!
Отвечу Вам мудростями. 1)Не судите по себе.
123ksnА нам на это похеру. Нам всё равно на тебя. Что есть ты, что нет тебя.
Большинству 40-летних я дам фору
123ksnУ тебя какая-то совковая фигня тут ещё проистекает? Пока что ниже плинтуса тут только ты. Почему ты ниже плинтуса? Потому что ты припёрся в новое поколение и пытаешься старыми способами заявить о себе. Мало того что ты нафиг не упал со своим нытьём про свою жизнь, так ты ещё и забиваешь общую тему разговорами о себе, когда ты ничего из себя не представляешь. Ты всю жизнь прожил, ты ничего из себя не представляешь и ты никому ничего не можешь дать, потому что ты абсолютно бесполезен. Ты просто тюлень. Лежишь и ничего не делаешь всю жизнь. Старость подошла, тебя вообще все бросили - и ты припёрся сюда.
3)Вы, сударь, опять опускаете себя ниже плинтуса
123ksnМы - свободное поколение. И тебе этого не понять, что это вообще такое. Поэтому нам наплевать на тебя и мы тебе об этом открыто говорим. А ты же, в свою очередь, ужимками какими-то общаешься, боясь пукнуть лишний раз не в ту сторону, чтобы тебе по башке учительница линейкой не дала. Тебя вот вырастили в такой среде и ты не понимаешь нихера сейчас, в наше время.
Возраст - это состояние души. Судя по Вашим назидательным постам, скорее это Вы глубокий старик.
123ksnТы просто старый дурак, попавший в новое время. Ты лучше расскажи, как ты, такой замечательный и активный, во время развала СССР такой молодой, живучий и многофункциональный мастер на все руки стоял и смотрел, как он разваливается, и ничего не делал при этом? Просрал всё?! Ну так теперь иди и ной в какую-нибудь жилетку какого-нибудь пенсионного фонда. Там тебя будут выслушивать каждый день, они как раз для того и сделаны. Там ты что-то из себя представлял, здесь ты - никто.
4)Когда реально поумнеете, поймете смысл этой притчи:
Отредактировано py.user.next (Дек. 2, 2022 21:38:36)
Офлайн
py.user.nextРекомендую показать свой последний пост своему отцу. Пусть он Вами гордится.
123ksn
Отвечу Вам мудростями. 1)Не судите по себе.
Вот у тебя у самого какие-то проблемы с этим. Ты приходишь на форум и начинаешь всем втирать, какой ты замечательный. Когда тебе говорят “дядь, а не пойти бы тебе к кому-нибудь там другому и в жилетку поплакать где-нибудь в другом месте? что ты нам-то втираешь про себя? ты думаешь, ты кому-то здесь упал вместе со всей своей жизнью?”, ты начинаешь обижаться, как ребёнок какой-то тупой. Ну, типа, знаешь, как когда у людей начинается старческое слабоумие, они резко становятся никому не интересны и из-за этого они начинают активно привлекать к себе внимание в стиле “ой! а я заболел! смотрите, чо у меня тут!”. Но это не помогает и в итоге мы получаем непрерывное нытьё “смотрите на меня! смотрите на меня!”. Да ты не нужен никому, всё, давай, до свидания!
123ksn
Большинству 40-летних я дам фору
А нам на это похеру. Нам всё равно на тебя. Что есть ты, что нет тебя.
123ksn
3)Вы, сударь, опять опускаете себя ниже плинтуса
У тебя какая-то совковая фигня тут ещё проистекает? Пока что ниже плинтуса тут только ты. Почему ты ниже плинтуса? Потому что ты припёрся в новое поколение и пытаешься старыми способами заявить о себе. Мало того что ты нафиг не упал со своим нытьём про свою жизнь, так ты ещё и забиваешь общую тему разговорами о себе, когда ты ничего из себя не представляешь. Ты всю жизнь прожил, ты ничего из себя не представляешь и ты никому ничего не можешь дать, потому что ты абсолютно бесполезен. Ты просто тюлень. Лежишь и ничего не делаешь всю жизнь. Старость подошла, тебя вообще все бросили - и ты припёрся сюда.
Тут не работают совковые методы, каким ты там был пионером, комсомольцем и прочая чушь. Никому это не интересно, все вас считают задротами.
123ksn
Возраст - это состояние души. Судя по Вашим назидательным постам, скорее это Вы глубокий старик.
Мы - свободное поколение. И тебе этого не понять, что это вообще такое. Поэтому нам наплевать на тебя и мы тебе об этом открыто говорим. А ты же, в свою очередь, ужимками какими-то общаешься, боясь пукнуть лишний раз не в ту сторону, чтобы тебе по башке учительница линейкой не дала. Тебя вот вырастили в такой среде и ты не понимаешь нихера сейчас, в наше время.
123ksn
4)Когда реально поумнеете, поймете смысл этой притчи:
Ты просто старый дурак, попавший в новое время. Ты лучше расскажи, как ты, такой замечательный и активный, во время развала СССР такой молодой, живучий и многофункциональный мастер на все руки стоял и смотрел, как он разваливается, и ничего не делал при этом? Просрал всё?! Ну так теперь иди и ной в какую-нибудь жилетку какого-нибудь пенсионного фонда. Там тебя будут выслушивать каждый день, они как раз для того и сделаны. Там ты что-то из себя представлял, здесь ты - никто.
Отстань от нас, ты нам не нужен со своей этой фигнёй тупой.
tags: ussr
Отредактировано py.user.next (вчера 21:38:36)
Отредактировано 123ksn (Дек. 3, 2022 14:07:03)
Офлайн
123ksnМы не подчищаем ветки, потому что у нас это не принято. Враньё, воровство и подчищание веток - это ваша прерогатива! Потому что вы - ссыкливые приспособленцы.
Ещё есть одна маленькая просьба. Не подчищайте эту ветку.
123ksnТы ошибаешься в своих предсказаниях. Передавай привет Горбачёву, продавшему страну за смайлики.
Пройдёт совсем немного времени и Вам будет чертовски стыдно за Ваши слова.
Отредактировано py.user.next (Дек. 3, 2022 22:23:51)
Офлайн