2012-06-13 56 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") 
相關問題