2017-12-27 5 views
1

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?

Antwort

0

So ersetzte ich dies:

url = pathlib.Path(full_path).as_uri()  
url_html = urlopen(url).read() 

mit diesem:

with open(full_path) as url_html 

und war in der Lage, dass in BeautifulSoup passieren und analysieren, wie gebraucht ...

Verwandte Themen