Ошибка Python Tika: URLError:

#java #python #apache-tika #tika-server

#java #python #apache-tika #tika-сервер

Вопрос:

Я часто использую python tika для извлечения текста из некоторых PDF-файлов. Внезапно Tika больше не работает со следующим кодом и подобным:

 from tika import parser
document = parser.from_file("prova.pdf")['content'] 
 

или

 from tika import parser
parser.from_file("C:/Users/Daniele/Desktop/progetto_tesi_magistrale/prova.pdf")['content']
 

и каждый раз, когда я получаю эту ошибку:

 2021-02-23 10:57:36,244 [MainThread  ] [INFO ]  Retrieving C:Program Filestika-server-1.24.1.jar to C:UsersDanieleAppDataLocalTemptika-server.jar.
---------------------------------------------------------------------------
URLError                                  Traceback (most recent call last)
~anaconda3libsite-packagestikatika.py in getRemoteJar(urlOrPath, destPath)
    797         try:
--> 798             urlretrieve(urlOrPath, destPath)
    799         except IOError:

~anaconda3liburllibrequest.py in urlretrieve(url, filename, reporthook, data)
    246 
--> 247     with contextlib.closing(urlopen(url, data)) as fp:
    248         headers = fp.info()

~anaconda3liburllibrequest.py in urlopen(url, data, timeout, cafile, capath, cadefault, context)
    221         opener = _opener
--> 222     return opener.open(url, data, timeout)
    223 

~anaconda3liburllibrequest.py in open(self, fullurl, data, timeout)
    524         sys.audit('urllib.Request', req.full_url, req.data, req.headers, req.get_method())
--> 525         response = self._open(req, data)
    526 

~anaconda3liburllibrequest.py in _open(self, req, data)
    546 
--> 547         return self._call_chain(self.handle_open, 'unknown',
    548                                 'unknown_open', req)

~anaconda3liburllibrequest.py in _call_chain(self, chain, kind, meth_name, *args)
    501             func = getattr(handler, meth_name)
--> 502             result = func(*args)
    503             if result is not None:

~anaconda3liburllibrequest.py in unknown_open(self, req)
   1420         type = req.type
-> 1421         raise URLError('unknown url type: %s' % type)
   1422 

URLError: <urlopen error unknown url type: c>

During handling of the above exception, another exception occurred:

URLError                                  Traceback (most recent call last)
<ipython-input-4-5aa5aa48deec> in <module>
      1 from tika import parser
      2 
----> 3 document = parser.from_file("prova.pdf")['content']
      4 #import tika
      5 #from tika import parser

~anaconda3libsite-packagestikaparser.py in from_file(filename, serverEndpoint, service, xmlContent, headers, config_path, requestOptions)
     38     '''
     39     if not xmlContent:
---> 40         output = parse1(service, filename, serverEndpoint, headers=headers, config_path=config_path, requestOptions=requestOptions)
     41     else:
     42         output = parse1(service, filename, serverEndpoint, services={'meta': '/meta', 'text': '/tika', 'all': '/rmeta/xml'},

~anaconda3libsite-packagestikatika.py in parse1(option, urlOrPath, serverEndpoint, verbose, tikaServerJar, responseMimeType, services, rawResponse, headers, config_path, requestOptions)
    334     headers.update({'Accept': responseMimeType, 'Content-Disposition': make_content_disposition_header(path.encode('utf-8') if type(path) is unicode_string else path)})
    335     with urlOrPath if _is_file_object(urlOrPath) else open(path, 'rb') as f:
--> 336         status, response = callServer('put', serverEndpoint, service, f,
    337                                       headers, verbose, tikaServerJar, config_path=config_path,
    338                                       rawResponse=rawResponse, requestOptions=requestOptions)

~anaconda3libsite-packagestikatika.py in callServer(verb, serverEndpoint, service, data, headers, verbose, tikaServerJar, httpVerbs, classpath, rawResponse, config_path, requestOptions)
    529     global TikaClientOnly
    530     if not TikaClientOnly:
--> 531         serverEndpoint = checkTikaServer(scheme, serverHost, port, tikaServerJar, classpath, config_path)
    532 
    533     serviceUrl  = serverEndpoint   service

~anaconda3libsite-packagestikatika.py in checkTikaServer(scheme, serverHost, port, tikaServerJar, classpath, config_path)
    590         if not alreadyRunning:
    591             if not os.path.isfile(jarPath) and urlp.scheme != '':
--> 592                 getRemoteJar(tikaServerJar, jarPath)
    593 
    594             if not checkJarSig(tikaServerJar, jarPath):

~anaconda3libsite-packagestikatika.py in getRemoteJar(urlOrPath, destPath)
    806             if os.path.exists(destPath) and os.path.isfile(destPath):
    807                 os.remove(destPath)
--> 808             urlretrieve(urlOrPath, destPath)
    809 
    810         return (destPath, 'remote')

~anaconda3liburllibrequest.py in urlretrieve(url, filename, reporthook, data)
    245     url_type, path = _splittype(url)
    246 
--> 247     with contextlib.closing(urlopen(url, data)) as fp:
    248         headers = fp.info()
    249 

~anaconda3liburllibrequest.py in urlopen(url, data, timeout, cafile, capath, cadefault, context)
    220     else:
    221         opener = _opener
--> 222     return opener.open(url, data, timeout)
    223 
    224 def install_opener(opener):

~anaconda3liburllibrequest.py in open(self, fullurl, data, timeout)
    523 
    524         sys.audit('urllib.Request', req.full_url, req.data, req.headers, req.get_method())
--> 525         response = self._open(req, data)
    526 
    527         # post-process response

~anaconda3liburllibrequest.py in _open(self, req, data)
    545             return result
    546 
--> 547         return self._call_chain(self.handle_open, 'unknown',
    548                                 'unknown_open', req)
    549 

~anaconda3liburllibrequest.py in _call_chain(self, chain, kind, meth_name, *args)
    500         for handler in handlers:
    501             func = getattr(handler, meth_name)
--> 502             result = func(*args)
    503             if result is not None:
    504                 return result

~anaconda3liburllibrequest.py in unknown_open(self, req)
   1419     def unknown_open(self, req):
   1420         type = req.type
-> 1421         raise URLError('unknown url type: %s' % type)
   1422 
   1423 def parse_keqv_list(l):

URLError: <urlopen error unknown url type: c>
 

Я попытался удалить tika python, tika server, java, python … в основном все. И самое странное, что внезапно у меня такая же проблема на моем втором компьютере.
Есть предложения? Большое спасибо.

Комментарии:

1. Попробуйте использовать абсолютный file:/// URL?

2. Уже пробовал, но та же ошибка

3. Вы недавно меняли свою urllib версию? Ошибка возникает из-за этого, она не попадает в Apache Tika

4. Нет, я его не трогал. Хотя я не установил urllib и переустановил его, просто чтобы быть уверенным. Та же ошибка

5. Я решил это. Я не знаю, как, но я запустил запрос брандмауэра на принятие java, и теперь он работает. Я чувствую себя глупо, потому что слышал о проблемах с брандмауэром, но не вспомнил проверить это. В любом случае спасибо