我在一所大学工作,我想提取我们拥有的所有 PDF 目录的所有文件名并制作一个文本文件。这些 PDF 均位于 Intranet 索引中。 WGET 在 Intranet 上工作得很好,我知道如何使用它从该索引下载一堆文件。然而,我正在对我们的目录进行审核,我需要每个目录的文件名 - 不是实际的 PDF 文件,只是“UniOfState0708.pdf”。
所有的 PDF 都位于不同的目录中,因此 /catalog/ 的 Indox 具有 UniOfStateA/、UniOfStateB/ 等目录,每个索引中都有 PDF,这些是我想要收集的名称。
WGET 可以做到这一点吗?如果可以的话我该怎么做?
答案1
以下解决方案仅适用于未格式化的标准apache2
生成的目录索引。您可以wget
索引文件并使用以下命令解析grep
它cut
:
#this will download the directory listing index.html file for /folder/
wget the.server.ip.address/folder/
#this will grep for the table of the files, remove the top line (parent folder) and cut out
#the necessary fields
grep '</a></td>' index.html | tail -n +2 | cut -d'>' -f7 | cut -d'<' -f1
请注意,如上所述,只有当目录列表是由apache2
具有基本选项的服务器生成时才有效,配置如下:
<Directory /var/www/html/folder>
Options +Indexes
AllowOverride None
Allow from all
</Directory>
在此配置中,wget
将返回index.html
没有任何特定格式的 ,但当然也可以使用选项自定义目录列表:
IndexOptions +option1 -option2 ...
为了提供更准确的答案(如果具体的话适合您的情况),我们需要一个示例index.html
文件。
这里还有一个 Python 版本:
from bs4 import BeautifulSoup
import requests
def get_listing() :
dir='http://cdimage.debian.org/debian-cd/8.4.0-live/amd64/iso-hybrid/'
for file in listFD(dir):
print file.split("//")[2]
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)]
def main() :
get_listing()
if __name__=='__main__' :
main()
用作指南这一页。