2014-04-22 3 views
0

urllib 모듈을 사용하여 url 파일을 열고 그 내용을 읽을 수 있습니다.Python에서 url 디렉토리를 읽는 방법

>>> urllib.urlopen('file://localhost/tmp/foobar').read() 

위의 내용은 디렉토리에서 작동하지 않습니다. url 디렉토리 (목록 내용)를 읽으려고합니다. 그것을하는 방법?

추가 : 웬일인지 당신이 이해할 수 있도록 설명하지 못했습니다. 나는 URL을 가지고있다 (로컬 디렉토리, 원격 디렉토리, ftp : // http : // 또는 무엇이든 : // 내가 접근 할 수있는 권한이있는 디렉토리의 모든 URL, 그 증거는 urllib.urlopen을 실행할 수있다). (해당 디렉토리에있는 파일의 URL) .read() 그리고 그것은 작동합니다. 그럼 내 질문은, 그 내용을 나열 디렉토리 자체에 대해 동일한 작업을 수행하는 것입니다.

내가 올바르게 파일 이름을 추측한다면 위와 같이 URL 디렉토리를 열면 그 파일에 접근 할 수 있습니다. 그런 다음 나에게도 추측하지 않고 파일 목록을 가져 오는 방법이 있어야합니다.

(매우 긴) 모든 이름을 찾으려면 1 문자 이름에서 시작하여 모든 것을 묻고 2 문자 조합을 모두 요구하십시오.이 방법은 비실용적이지만 원칙적으로 보여줍니다 결국 모든 파일 이름을 알 수 있습니다. 그러면이 작업을 신속하게 수행 할 수있는 방법이 있어야합니다.

+0

디렉토리 인 파일을 열어 무슨 뜻입니까? 디렉토리 목록과 비슷한 것을 제공하는 웹 사이트를 방문 할 때를 의미합니까? –

+0

디렉토리에 대한 링크를 제공 할 수 있습니까? 아니면 어떤 코드? – Luigi

+0

아니요, URL이 일반 파일 (디렉토리가 아님) 인 경우 urllib.urlopen을 사용하여 읽을 수 있으며 파일 내용을 읽을 수 있습니다. 내가 디렉토리에서 같은 것을 시도해도 작동하지 않는다. url 디렉토리의 내용을 나열하고 싶습니다. 모두 –

답변

1

간단히 말해서 네,하지만 요청을 사용합니다.

urllib (그리고 말 그대로 3 줄의 코드)을 직접 사용하는 것이 훨씬 바람직하기 때문에 requests 모듈을 사용하는 예제를 제공 할 것입니다.

나는 당신이이 디렉토리는 팟 캐스트 목록이 포함되어 있습니다

>>> import requests 
>>> r = requests.get('http://www.tulane.edu/~howard/SPAN-NLP/mp3/') 
>>> print r.text 

'파일 디렉토리'가 무엇을 의미하는지 생각하는, 예를 들어 this을 사용할 것입니다. 당신이 볼 수 있듯이

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<html> 
<head> 
    <title>Index of /~howard/SPAN-NLP/mp3</title> 
</head> 
<body> 
<h1>Index of /~howard/SPAN-NLP/mp3</h1> 
<ul><li><a href="/~howard/SPAN-NLP/"> Parent Directory</a></li> 
<li><a href="SPAN4350-01-Intro.MP3"> SPAN4350-01-Intro.MP3</a></li> 
<li><a href="SPAN4350-02-CompLeng1.MP3"> SPAN4350-02-CompLeng1.MP3</a></li> 
<li><a href="SPAN4350-03-ListasCadenas.MP3"> SPAN4350-03-ListasCadenas.MP3</a></li> 
<li><a href="SPAN4350-04-Cadenas2.MP3"> SPAN4350-04-Cadenas2.MP3</a></li> 
<li><a href="SPAN4350-05-Cadenas3.MP3"> SPAN4350-05-Cadenas3.MP3</a></li> 
<li><a href="SPAN4350-06-Cadenas4.MP3"> SPAN4350-06-Cadenas4.MP3</a></li> 
<li><a href="SPAN4350-09-UnicodeRegex.MP3"> SPAN4350-09-UnicodeRegex.MP3</a></li> 
<li><a href="SPAN4350-10-Regex.MP3"> SPAN4350-10-Regex.MP3</a></li> 
<li><a href="SPAN4350-11-Regextoken.MP3"> SPAN4350-11-Regextoken.MP3</a></li> 
<li><a href="SPAN4350-12-NLTK.MP3"> SPAN4350-12-NLTK.MP3</a></li> 
<li><a href="SPAN4350-13-NLTK_Control.MP3"> SPAN4350-13-NLTK_Control.MP3</a></li> 
<li><a href="SPAN4350-14-Control2.MP3"> SPAN4350-14-Control2.MP3</a></li> 
<li><a href="SPAN4350-15-Control3.MP3"> SPAN4350-15-Control3.MP3</a></li> 
<li><a href="SPAN4350-16-Control4.MP3"> SPAN4350-16-Control4.MP3</a></li> 
<li><a href="SPAN4350-17-Control5.MP3"> SPAN4350-17-Control5.MP3</a></li> 
<li><a href="SPAN4350-18-ReciclarCodigo.MP3"> SPAN4350-18-ReciclarCodigo.MP3</a></li> 
<li><a href="SPAN4350-19-Funciones.MP3"> SPAN4350-19-Funciones.MP3</a></li> 
<li><a href="SPAN4350-21-Funciones2.MP3"> SPAN4350-21-Funciones2.MP3</a></li> 
<li><a href="SPAN4350-22-ComputacionLeng.MP3"> SPAN4350-22-ComputacionLeng.MP3</a></li> 
<li><a href="SPAN4350-23-ComputacionLeng2.MP3"> SPAN4350-23-ComputacionLeng2.MP3</a></li> 
<li><a href="SPAN4350-24-ComputacionLeng3.mp3"> SPAN4350-24-ComputacionLeng3.mp3</a></li> 
<li><a href="SPAN4350-25-ComputacionLeng4.MP3"> SPAN4350-25-ComputacionLeng4.MP3</a></li> 
<li><a href="SPAN4350-26-ComputacionLeng5.MP3"> SPAN4350-26-ComputacionLeng5.MP3</a></li> 
<li><a href="SPAN4350-27-Tuiter.MP3"> SPAN4350-27-Tuiter.MP3</a></li> 
<li><a href="SPAN4350-30-Tuiter3.MP3"> SPAN4350-30-Tuiter3.MP3</a></li> 
<li><a href="SPAN4350-31-Tuiter4.MP3"> SPAN4350-31-Tuiter4.MP3</a></li> 
<li><a href="SPAN4350-32-Web.MP3"> SPAN4350-32-Web.MP3</a></li> 
<li><a href="SPAN4350-33-Web2.MP3"> SPAN4350-33-Web2.MP3</a></li> 
<li><a href="SPAN4352-34-Youtube.MP3"> SPAN4352-34-Youtube.MP3</a></li> 
<li><a href="SPAN4352-35-Youtube2.MP3"> SPAN4352-35-Youtube2.MP3</a></li> 
</ul> 
</body></html> 

, 그것은 기본적으로 HTML 문서와 같은 디렉토리에있는 모든 파일의 표현입니다 : 여기 r.text의 결과이다. 매우 쉽게 정규식을 사용하여 모든 링크를 추출하고 모든 파일에 액세스하기 위해 반복합니다.

파일이 호스팅되는 장소가이 유형의 문서를 반환하도록 구성된 경우에만 작동합니다. 대부분은 그렇지만 달리 구성되어 있다면 프로그래밍 방식으로 다른 방법을 알 수 없습니다.

또한 모든 문자 조합을 사용하여 무차별 대항력을 사용하지 마십시오. 그렇게하는 것이 훨씬 더 좋은 방법이 있습니다 (일반적으로 사람들은 단어를 파일 이름으로 사용하고 마지막에는 숫자를 사용합니다. 단어는 일반적으로 파일의 내용과 관련되어 있으므로 어떤 유형의 것을 알고 있는지 추측 할 수 있습니다. 찾는 사람, 등)

관련 문제