Usando o WGET para puxar todos os nomes de arquivos de um índice

1

Eu trabalho para uma universidade e quero puxar todos os nomes de arquivos de todos os catálogos em PDF que temos e criar um arquivo de texto. Esses PDFs estão todos localizados em um índice de intranet. O WGET funciona bem com a intranet e eu sei como usá-lo para baixar um monte de arquivos deste índice. No entanto, estou fazendo uma auditoria de nossos catálogos e preciso dos nomes dos arquivos de cada catálogo - não dos arquivos PDF reais, apenas o "UniOfState0708.pdf".

Todos os PDFs estão em diretórios diferentes, então Indox de / catalog / possui diretórios como UniOfStateA /, UniOfStateB /, etc. e cada índice tem PDFs neles e esses são os nomes que eu quero coletar.

O WGET pode fazer isso e, em caso afirmativo, como eu faria isso?

    
por Ian Pringle 02.06.2016 / 17:20

1 resposta

1

A solução abaixo só funcionará para um índice de diretório padrão não formatado, com apache2 . Você pode wget do arquivo de índice e analisá-lo com grep e cut , por exemplo:

#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

Por favor note, como mencionado acima, isso só funcionará se a listagem do diretório for gerada por um servidor apache2 com opções básicas, configuradas como:

<Directory /var/www/html/folder>
 Options +Indexes 
 AllowOverride None
 Allow from all
</Directory>

Nesta configuração, o wget retornará um index.html sem qualquer formatação específica, mas é claro que a listagem de diretórios também pode ser personalizada com opções:

IndexOptions +option1 -option2 ...

Para oferecer uma resposta mais precisa, adequada ao seu caso, se isso for específico, precisaríamos de um exemplo de arquivo index.html .

E aqui também é uma versão do 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()

Usado como um guia esta página .

    
por 02.06.2016 / 21:52

Tags