2012-06-13 35 views
1

如果我只有一个IP地址,如何列出文件和文件夹?Python以列出HTTP文件和目录

使用urllib等,我只能显示index.html文件的内容。但是,如果我想查看哪些文件在根目录下呢?

我正在寻找一个示例,说明如果需要的话可以实现用户名和密码。 (大部分时间index.html是公开的,但有时其他文件不是)。

+0

这篇文章“”应该可以帮助你...希望:) – 2012-08-23 21:35:57

回答

5

HTTP不适用于“文件”和“目录”。选择一个不同的协议。

4

正如另一个答案所说,您无法直接通过HTTP获取目录列表。这是HTTP服务器,“决定”给你什么。有些会给你一个HTML页面,显示“目录”中所有文件的链接,有些会给你一些页面(index.html),有些甚至不会将“目录”解释为一个页面。

例如,您可能有一个指向“http:// localhost/user-login /”的链接:这并不意味着在服务器的文档根目录中有一个名为user-login的目录。服务器将其解释为某个页面的“链接”。

现在,要实现你想要的,你必须使用HTTP以外的东西(你想访问的“ip地址”上的FTP服务器可以完成这项工作),或者在该机器上设置一个HTTP服务器它为每个路径(http://192.168.2.100/directory)提供了一个文件列表(以任何格式)并通过Python解析。

如果服务器提供“index/bla/bla”类型的页面(如Apache服务器,目录列表),则可以解析HTML输出以找出文件和目录的名称。如果没有(如自定义的index.html,或任何服务器决定给你),那么你的运气了:(,你不能这样做。

+0

很好的答案。谢谢你的帮助。的确,index.html给了我其他文件和文件夹的名字。也许我可以尝试去取这些。 – apfz

+1

伟大:)如果是这种情况,请尝试使用BeautifulSoup搜索python中的html解析。还有其他的图书馆也是这样的。 – jadkik94

7

使用requests获得页面内容和BeautifulSoup解析结果
例如,如果我们搜索所有iso文件:。

from bs4 import BeautifulSoup 
import requests 

url = 'http://cdimage.debian.org/debian-cd/8.2.0-live/i386/iso-hybrid/' 
ext = 'iso' 

def listFD(url, ext=''): 
    page = requests.get(url).text 
    print page 
    soup = BeautifulSoup(page, 'html.parser') 
    return [url + '/' + node.get('href') for node in soup.find_all('a') if node.get('href').endswith(ext)] 

for file in listFD(url, ext): 
    print file 
0

你可以用下面的脚本得到子目录和目录中的所有文件的名称在HTTP服务器上的文件作家可以用它们来下载它们。

from urllib.request import Request, urlopen, urlretrieve 
from bs4 import BeautifulSoup 
def read_url(url): 
    url = url.replace(" ","%20") 
    req = Request(url) 
    a = urlopen(req).read() 
    soup = BeautifulSoup(a, 'html.parser') 
    x = (soup.find_all('a')) 
    for i in x: 
     file_name = i.extract().get_text() 
     url_new = url + file_name 
     url_new = url_new.replace(" ","%20") 
     if(file_name[-1]=='/' and file_name[0]!='.'): 
      read_url(url_new) 
     print(url_new) 

read_url("www.example.com") 
相关问题