Граббинг сайта на Python c использованием библиотеки Grab Программа использует один из сайтов сайта суда России как источник данных, в коде это https://vytegorsky--vld.sudrf.ru. Она производит поиск заданных слов в списке назначенных дел в период от текущего дня до назначаемого дня и отправляет результат поиска на электронный почтовый ящик. В списке search_list назначаются слова, по которым будет произведен поиск. Количество просматриваемых дней начиная от текущего, в которых будет происходить поиск устанавливается переменной DaysFuture. Также устанавливаются параметры SMTP сервера и почтовых ящиков отправителя и получателя. Процесс выполнения кода журналируется в файл example_app.log. SearchOnTheWebsiteExample-ru.py # Поиск набора символьных строк на сайте суда в разделе # <Список дел, назначенных к слушанию> с перебором дней слушаний, # с отправкой результатов поиска на почтовый адрес, # с логированием процесса выполнения from grab import Grab from datetime import datetime, timedelta import smtplib from smtplib import email from email.mime.text import MIMEText import logging # настройка логирования logger = logging.getLogger("example_app") logger.setLevel(logging.INFO) fh = logging.FileHandler("example_app.log") formatter = logging.Formatter('%(asctime)s %(message)s') fh.setFormatter(formatter) logger.addHandler(fh) # в лог пустая строка и сообщение о запуске logger.info("") logger.info("Start") # кол-во дней начиная от текущего, в которых будет происходить поиск DaysFuture = 5 # список: # колонка [0]: слово поиска как строка # колонка [1]: список дат страниц, на которой поиск был успешным search_list = [ \ [u'ПОИСКОВОЕ СЛОВО_1',[]], \ [u'поисковое_слово_2',[]], \ ] # назначение параметров для отправки почтовых сообщений # SMTP сервер, например smtp.gmail.com smtp_server = "smtp.gmail.com" port = 465 # отправитель, например sender@gmail.com email_from = "ОТПРАВИТЕЛЬ" # пароль password = "ПАРОЛЬ_ПОЧТОВОГО_ЯЩИКА" # получатель, например recipient@gmail.com email_dest = 'ПОЛУЧАТЕЛЬ' # Тема почтового сообщения subject = u"Информация с сайта суда на " + datetime.now().strftime("%Y-%m-%d") # в лог сообщение о начале получения данных logger.info("Grab start") g = Grab() # установка кодовой страницы и времени ожидания def prepare(self): self.setup_grab(document_charset='windows-1251') self.setup_grab(timeout = 10) # цикл по датам (страницам дат) for CounterDays in range(0,DaysFuture): CounterDate = (datetime.now() + timedelta(days=CounterDays)).strftime("%d.%m.%Y") url = 'https://vytegorsky--vld.sudrf.ru/modules.php?name=sud_delo&srv_num=1&H_date=' + CounterDate counter_go = 0 # после 10 неудачных попыток получения данных, производим запись в лог и выполняем # переход на следующую дату while True: try: g.go(url) break except Exception as e: counter_go = counter_go + 1 if counter_go > 10: logger.info("Grab error: " + url + " , " + + str(e)) break continue # двигаясь по списку слов поиска (колонка [0]), при успешном нахождении слова в тексте страницы, # сохраняем дату страницы в колонка результата (колонка [1]), как элемент списка for row in search_list: if g.doc.text_search(row[0].encode('cp1251'), byte=True): row[1].append(CounterDate) # в лог сообщение о завершении получения данных logger.info("Grab completed") # в лог сообщение о начале формирования и отправки почтового сообщения logger.info("Start sending an email message") # формирование текста сообщения email_text = '' for row in search_list: if len(row[1]) > 0: if len(email_text) != 0: email_text = email_text + '\n' email_text = email_text + row[0] + ': ' email_text_line = '' for one_date in row[1]: if len(email_text_line) != 0: email_text_line = email_text_line + u',' email_text_line = email_text_line + one_date email_text = email_text + email_text_line # Отправка почтового сообщения m = MIMEText(email_text) m['Subject'] = subject m['From'] = email_from m['To'] = email_dest try: server = smtplib.SMTP_SSL(smtp_server, port) server.login(email_from, password) server.sendmail(email_from, email_dest, m.as_string()) server.quit() # в лог logger.info("Send mail message complete") except Exception as e: # в лог logger.info("Error sending mail message: " + str(e)) # в лог logger.info("Completed") ru/grabbing_of_the_court_site_using_python.txt Последние изменения: 2018/06/27 22:06 — 2SRTVF