在网站上递归搜索具有目录浏览的文件
有没有办法在一个支持HTTP目录浏览的网页服务器上查找某个文件或文件夹是否存在呢?我有一个网站,里面有很多文件和文件夹。我想要浏览这些文件夹,找到一个可能在任何子文件夹里的特定文件。通常我们可以在文件系统上用 os.path.isfile("file_name")
来做到这一点,但在HTTP的目录浏览中,这个方法就不行了。那我们该怎么做呢?
1 个回答
3
在网上做这件事并不像在文件系统中那么简单。首先,不同的网络服务器在文件夹列表的显示上会有差异。所以你得知道这些列表是怎么格式化的。例如,我注意到大多数使用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/')