私は大学で働いており、私たちが持っているすべてのPDFディレクトリのすべてのファイル名を抽出してテキストファイルを作成したいと思います。これらのPDFはイントラネットインデックスにあります。 WGETはイントラネットでうまく機能し、それを使用してそのインデックスから複数のファイルをダウンロードする方法を知っています。しかし、私はディレクトリを監査しており、各ディレクトリのファイル名が必要です。実際の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()
ガイドとして使用このページ。