class ArticleServer(object): def __init__(self, reactor, conf): self.reactor = reactor self.article_extractor = ArticleExtractor(conf) self.logger = logging.getLogger("") def process_request(self, response, url): pass def process_body(self, body, url): self.article_extractor.extract(body, url) print body[:100] def process_error(self, failure, url): print failure.getErrorMessage() self.logger.error("download error, url:%s, msg:%s" % (url, failure.getErrorMessage())) def process_task(self, url): url = url.encode('utf-8') requestProcess = (self.process_request, (url,), {}) bodyProcess = (self.process_body, (url,), {}) errorProcess = (self.process_error, (url,), {}) print "article_task:", url self.reactor.download_and_process(url, None, requestProcess, bodyProcess, errorProcess, redirect=True)
def get_article(self, url): # инициализируем UrlHandler urlhandler = UrlHandler() # получаем веб-страницу и её кодировку source_page, encoding = urlhandler.load_page(url) # инициализируем парсер, текстовый процессор, экстрактор html_parser = Parser(source_page, encoding) text_processor = TextProcessor(self.language) article_extractor = ArticleExtractor(self.language) formatter = Formatter() # получаем списки элементов, очищенных от тегов (raw_cleaned_elements) # и нет (elements_as_string) raw_cleaned_elements, elements_as_string = html_parser.get_parsed_nodes( ) # заголовок title = html_parser.get_title() # получаем спосок лемматизированных текстов stemmed_tag_elements = text_processor.iterate_over_texts( raw_cleaned_elements) # получаем ранжированный список элементов best_nodes = article_extractor.find_best_node(stemmed_tag_elements) # для первого элемента из ранжированного списка # ищем в цикле нужный элемент с тегами (elements_as_string) # передаем найденный элемент в out_formatter for text, element in zip(raw_cleaned_elements, elements_as_string): if best_nodes[0][0] == text: node_to_format = element # out_formatter подготавливает текст для сохранения clean_text = formatter.format_article(node_to_format) # сохраняем в текстовый файл with codecs.open('output.txt', 'w', 'utf-8') as out: out.write(title + '\n\n') for paragraph in clean_text: for line in paragraph: out.write(line) out.write('\n') out.write('\n')
def __init__(self, reactor, conf): self.reactor = reactor self.article_extractor = ArticleExtractor(conf) self.logger = logging.getLogger("")