使用/目录浏览以网站递归搜索文件

时间:2013-03-06 07:23:55

标签: python urllib

有没有办法找到一个文件或目录是否存在于http目录浏览的Web服务器上?我有一个包含许多文件和目录的站点。我想遍历目录并找到可以位于子目录中任何位置的给定文件。通常我们可以在文件系统上使用os.path.isfile("file_name")来执行此操作,但这不适用于HTTP上的目录浏览。我们怎么能这样做?

1 个答案:

答案 0 :(得分:3)

在网络上执行此操作并不像使用文件系统那样简单。首先,文件夹列表中存在差异,具体取决于它是什么Web服务器。所以你必须知道列表的格式。例如,我注意到大多数linux / apache服务器的模式是文件夹以斜杠“/”文件结尾。父文件夹以斜杠开头,文件夹不以...等...

这只是一个可以帮助您开始正确方向的示例(确实有效)。要运行该示例,您必须安装BeautifulSoup

import urllib.request
from bs4 import BeautifulSoup

def RecurseLinks(base):

    f = urllib.request.urlopen(base)
    soup = BeautifulSoup(f.read())
    for anchor in soup.find_all('a'):
        href = anchor.get('href')
        if (href.startswith('/')):
            print ('skip, most likely the parent folder -> ' + href)
        elif (href.endswith('/')):
            print ('crawl -> [' + base + href + ']')
            RecurseLinks(base + href) # make recursive call w/ the new base folder
        else:
            print ('some file, check if xyz.txt -> ' + href) # save it to a list or return 

# call the initial root web folder
RecurseLinks('http://somesite-xyx.com.com/directory-browsing/')