如何在Python中读取url目录

时间:2014-04-22 20:08:16

标签: python

我可以使用urllib模块打开url文件并读取其内容。

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

以上不适用于目录 - 我想读取(列出内容)一个url目录。怎么做?

补充:出于某种原因,我没有解释这一点,所以你理解。我有一个网址(可以是任何东西,本地目录,远程目录,ftp:// http://或任何东西://我有权访问的目录的任何网址,证据是,我可以执行urllib.urlopen (该目录中文件的URL).read()并且它有效。然后我的问题是,如何对目录本身做同样的事情,列出其内容。

如果我正确猜出url目录中文件的名称,那么我可以访问该文件,如上所述。然后在我看来,应该有一种方法来做到这一点,而不是猜测,即首先获取文件列表。

我可以(非常长)搜索所有名称,从1个字符名称开始,要求所有这些,然后是所有2个字符组合,依此类推。虽然这是不切实际的,但它原则上表明我最终可以得到文件的所有名称。然后应该有一种方法来快速做到这一点。

1 个答案:

答案 0 :(得分:1)

简而言之,是的,但请使用请求。

我将使用requests模块给出一个示例,因为它更倾向于直接使用urllib(以及三行代码)。

我将以this为例,我认为你的意思是'文件目录'

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

此目录包含播客列表。以下是r.text

的结果
<!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文档表示目录中的所有文件。您可以非常轻松地使用正则表达式提取所有链接并迭代它们以访问所有文件。

仅当托管文件的位置配置为返回此类文档时,此操作才有效。大多数都这样做,但如果配置得其他,我不知道以其他方式以编程方式这样做。

此外,使用所有角色组合可能不会蛮力。有更好的方法可以这样做(通常人们使用单词作为文件名,最后可能有一个数字,这些单词通常与文件的内容有关,所以你可以用它来猜测你是否知道你是什么类型的东西#39;寻找等等。)