Ich muss Hunderte von HTML-Dateien analysieren, die auf einem Server archiviert sind. Auf die Dateien wird über UNC zugegriffen, und dann benutze ich die Methode as_uri() von pathlib, um den UNC-Pfad als URI zu konvertieren.Python 3.6.3 urlopen Servernamen aus URI entfernen für HTML-Datei auf Remote-Server
vollständigen UNC-Pfad zum Beispiel unter: \\ dmsupportfs \ ~ images \ Sandbox \ test.html
from urllib.request import urlopen
from bs4 import BeautifulSoup
import os, pathlib
source_path = os.path.normpath('//dmsupportfs/~images/sandbox/') + os.sep
filename = 'test.html'
full_path = source_path + filename
url = pathlib.Path(full_path).as_uri()
print('URL -> ' + url)
url_html = urlopen(url).read()
So ist die URI (L) Ich bin vorbei an urlopen ist: file: // dmsupportfs/% 7Eimages/sandbox/test.html
Ich kann dies in jeden Webbrowser einstecken und die Seite zurückgeben, aber wenn urlopen geht, um die Seite zu lesen, ignoriert/entfernt es den Servernamen (dmsupportfs) aus dem URI und Daher schlägt der Lesevorgang fehl und die Datei konnte nicht gefunden werden. Ich nehme an, dass dies etwas mit der Methode urlopen ist, die den URI verarbeitet, aber ich bin an dieser Stelle ratlos (wahrscheinlich etwas schnell und einfach zu lösen ... Entschuldigung, ein wenig neu in Python). Wenn ich den UNC-Speicherort einem Laufwerksbuchstaben zuordnen und dann den zugeordneten Laufwerksbuchstaben anstelle des UNC-Pfads verwenden, funktioniert das problemlos. Ich möchte jedoch nicht auf ein zugeordnetes Laufwerk angewiesen sein, um dies zu erreichen. Irgendein Rat?
Unten ist die Ausgabe des obigen Code den Fehler zeigt:
Traceback (most recent call last):
File "C:\Anaconda3\lib\urllib\request.py", line 1474, in open_local_file
stats = os.stat(localfile)
FileNotFoundError: [WinError 3] The system cannot find the path specified: '\\~images\\sandbox\\test.html'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "url_test.py", line 10, in <module>
url_html = urlopen(url).read()
File "C:\Anaconda3\lib\urllib\request.py", line 223, in urlopen
return opener.open(url, data, timeout)
File "C:\Anaconda3\lib\urllib\request.py", line 526, in open
response = self._open(req, data)
File "C:\Anaconda3\lib\urllib\request.py", line 544, in _open
'_open', req)
File "C:\Anaconda3\lib\urllib\request.py", line 504, in _call_chain
result = func(*args)
File "C:\Anaconda3\lib\urllib\request.py", line 1452, in file_open
return self.open_local_file(req)
File "C:\Anaconda3\lib\urllib\request.py", line 1491, in open_local_file
raise URLError(exp)
urllib.error.URLError: <urlopen error [WinError 3] The system cannot find the path specified: '\\~images\\sandbox\\test.html'>
UPDATE: Also, durch die Zurückverfolgungs Graben oben und den tatsächlichen Methoden und finde ich, was mich im Wesentlichen erzählt, was ich versuche mit einer Datei zu tun: // URI wird nicht für einen Remote-Server funktionieren.
def file_open(self, req):
url = req.selector
if url[:2] == '//' and url[2:3] != '/' and (req.host and
req.host != 'localhost'):
if not req.host in self.get_names():
raise URLError("file:// scheme is supported only on localhost")
Irgendwelche Ideen dann, wie man das ohne Zuordnung eines Laufwerks zur Arbeit bringt?