def get_target(target_fname, spider_target_fname): def printer(msg): print msg raw_target, err = local_dal.read_utf_file_to_list_lines(target_fname) target = get_target_object(raw_target) print 'Source target: ' map(printer, target.items()) rpt = check_crawler_target(target) print print 'Rpt:' map(printer, rpt) # Можно передавать краулеру на посик файлов - DataIsSafe # поиск print print 'Begin finding' roots = target[kKeyRoot] extension_list = target[kKeyTargetExts] ignored_dirs = target[kKeyIgnoredDir] result_list, err = os_walker.find_files_down_tree_roots(roots, extension_list, ignored_dirs) if err[0]: print err[1] print 'End finding' # Разбираем не узлы target_for_spider, rpt = fill_target_for_spider(result_list) if rpt: print print 'Rpt:' map(printer, rpt) fname = spider_target_fname local_dal.write_result_file(target_for_spider, fname) #print '\nResult target:' #map(printer, target.items()) print print 'Nodes and urls write to file - '+fname return target
sys.path.append('../src') from crawlers import get_target from dals.local_host.local_host_io_wrapper import write_result_file except: formatted_lines = traceback.format_exc().splitlines() err_msg = '\n'.join(formatted_lines) print err_msg print sys.path var = raw_input("Press any key.") exit() def printer(msg): print msg if __name__=='__main__': target_fname = 'targets/crawler_schedule.txt' spider_target_fname = 'targets/spider_extractor_target'#.txt' target = get_target(target_fname, spider_target_fname+'.txt') print target json_target = json.dumps(target, sort_keys=True, indent=2) print '\nResult target:' print json_target # Эти настройки и настройки узлов лучше хранить раздельно spider_target_fname = spider_target_fname+'.json' write_result_file([json_target], spider_target_fname) print 'Done' var = raw_input("Press any key.")
def process(self, input_fname, path_to_node): def get_fname_for_save(fname): fname = fname.replace('\\','/') only_fname = fname.split('/')[-1] output_fname = path_to_node+'/'+only_fname+'.ptxt' return output_fname def get_fname_for_save_meta(fname): fname = fname.replace('\\','/') only_fname = fname.split('/')[-1] output_fname = path_to_node+'/'+only_fname+'.meta' return output_fname def file_is_enabled(fname): extention = fname.split('.')[-1] if extention in self._enabled_extentons: return True return False def purge_line(one_line): if not is_content_letter(one_line): return None result = one_line.replace('\t','') return result """ Присутствует фильта входных файлов, что упрощает обработку папок с разнородными файлами. TODO(zaqwes): Используется детектор языков от Tika, хотя детектирует правильно, но выдает, что недостаточно. Возможно можно заменить на другую библитеку Postcond.: Текстовой файл с полностью снятым форматированием. Язык не определен. Trouble: - Если программа содержит код """ print 'Processing file : ', input_fname if not file_is_enabled(input_fname): return None, (1, 'File must *.doc, *.docx, *.pdf, *.odt. File skipped.') input_var = None output_fname = get_fname_for_save(input_fname) # Файл временный, он же выходной print output_fname out_file = File(output_fname) # Врядли выкенет исключение ofile_stream = FileOutputStream(out_file) lang = None try: # TODO(zaqwes): не очень понятно, что здесь происходит url = URL file_obj = File(input_fname); if file_obj.isFile(): url = file_obj.toURI().toURL(); else: url = URL(input_fname); # TODO(zaqwes): не очень понятно, что здесь происходит # Начинаем обработку metadata = {'url':input_fname} result_utf8 = []#['metadata',''] # формат строгий!! # На данный момент сохраняем в промежуточный файл на диске, но можно и ускорить # например, через отображение на память input_var = TikaInputStream.get(url, self._metadata); handler = BodyContentHandler(ofile_stream) self._parser.parse(input_var, handler, self._metadata, self._context); if ofile_stream: ofile_stream.close() return 'TEST', (1, 'TEST') # Преобразуем в unicode java_in = BufferedReader(FileReader(output_fname)) writer = ProfilingWriter(); while True: s = String() s = java_in.readLine() print s if s == None: break # Строку нужно подчистить one_line = unicode(str(s), 'utf-8') one_line = purge_line(one_line) if one_line: result_utf8.append(one_line) writer.append(one_line); identifier = writer.getLanguage(); lang = identifier.getLanguage() metadata['lang'] = lang #print identifier.isReasonablyCertain() # Всегда False #System.out.println(identifier.getLanguage()); meta_fname = get_fname_for_save_meta(input_fname) # Сохраняем результат dal.write_result_file(result_utf8, output_fname) dal.write_result_file([json.dumps(metadata, sort_keys=True, indent=2)], meta_fname) except IOException as e: err_code = 1 err_msg = 'Error: io.' e.printStackTrace() return output_fname, err_code, err_msg except TikaException as e: # Отключит обработку? Нет не отключит, т.к. исключение поймано e.printStackTrace() except SAXException as e: e.printStackTrace() finally: if input_var: try: input_var.close() except IOException as e: e.printStackTrace(); # Подводим итоги return ((output_fname, lang), (0, ''))