Python列出HTTP文件和目录

时间:2012-06-13 21:25:21

标签: python html directory ip-address

如果我只有IP地址,如何列出文件和文件夹?

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

我正在寻找一个示例,说明如何在需要时实现用户名和密码。 (大多数时候index.html是公共的,但有时其他文件不是)。

5 个答案:

答案 0 :(得分:21)

使用requests获取网页内容,使用BeautifulSoup解析结果 例如,如果我们在iso搜索所有http://cdimage.debian.org/debian-cd/8.2.0-live/i386/iso-hybrid/个文件:

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

答案 1 :(得分:6)

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

答案 2 :(得分:5)

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

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

现在,要实现您想要的功能,您必须使用HTTP之外的其他内容(您要访问的“IP地址”上的FTP服务器才能完成此任务),或者在该计算机上设置HTTP服务器为每个路径(http://192.168.2.100/directory)提供了一个文件列表(无论采用何种格式),并通过Python进行解析。

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

答案 3 :(得分:1)

Zety提供了一个很好的紧凑型解决方案。我会通过使os.stat(os.path.join(path_in, filename)).st_size组件更健壮和更实用来添加他的示例:

requests

答案 4 :(得分:0)

您可以使用以下脚本获取HTTP Server中子目录和目录中所有文件的名称。可以使用文件编写器下载它们。

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")