저는 대학에서 일하고 있으며 우리가 가지고 있는 모든 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()
가이드로 사용이 페이지.