(Começou como algumas dicas, acabou sendo uma resposta bastante grande. (novamente:]))
Eu não posso responder se há alguma política no site contra o download em lote, mas como um começo.
Embora isso seja muito específico do site, o mesmo procedimento deve ser aplicável a sites semelhantes, portanto, a resposta pode ser útil para outras pessoas. Mais como um exemplo.
Em esse tipo de página, eu teria olhado mais de perto o site e não tentado rastreá-lo como um todo. Por um lado, existem conteúdos gratuitos e pagos. Em segundo lugar; simplesmente baixar tudo em uma pilha enorme pode se tornar um pouco confuso, especialmente considerando quantos documentos existem.
Isolando as páginas de índice
-
A página mostra o mesmo URL, não importa em que seção você esteja. Mas, olhando para a fonte ou simplesmente aspirando uma das seções, você verá que ela tem pelo menos dois possíveis destinos interessantes:
PDF : https://mises.org/library/books?book_type=539 EPUB: https://mises.org/library/books?book_type=537
-
O resultado é dividido por 10 e 10 ocorrências. Por exemplo: PDF show Exibindo 1 - 10 de 535 . Hoovering os números na parte inferior localizamos a próxima informação interessante:
&page=1
,&page=2
etc.
Como existem 535 ocorrências, temos que fazer o download de 535 / 10 = 54
páginas. Como page=0
, a última página atual seria page=53
.
Isso nos dá uma dica sobre o que fazer o download para começar. PDF:
https://mises.org/library/books?book_type=539&page=0
https://mises.org/library/books?book_type=539&page=1
...
https://mises.org/library/books?book_type=539&page=53
Como os PDFs free parecem incluir EPUBs gratuitos, provavelmente não há necessidade de fazer o mesmo para a guia EPUB .
Nesse caso, pode-se acabar fazendo algo como:
mkdir mises.org
cd mises.org
Execute no terminal ou adicione a um arquivo de script:
for i in {0..53}
do
curl -o ./"$(printf "pdfl-%03d.html" $i)" "https://mises.org/library/books?book_type=539&page=$i"
done
Já temos uma boa estrutura ordenada para trabalhar.
Extraindo dados relevantes
Depois disso, o próximo passo é olhar mais de perto uma das subpáginas. Por exemplo, pdfl-000.html
.
Após um rápido exame, descobrimos que cada livro está contido em:
<div class="panel-body">
... book data ...
</div>
Agora, tudo dependendo do que você gostaria de extrair o caminho daqui em diante é ir para file-name + arquivo-url , ou também incluir meta dados e outros sugar como autor, tópico, imagens, etc. Para o último, você usaria um analisador de HTML em algo como Python, Perl ou algo parecido. Para o primeiro, isso também pode ser usado - mas também é possível usar ferramentas de processamento de texto mais simples, como sed
, grep
etc.
Neste caso, (por simplicidade), eu vou para o primeiro.
Agora, é comum afirmar que nunca devemos analisar HTML com regexp etc., mas, neste caso, não estamos analisando o documento , mas apenas extraindo dados relevantes . Assim, especialmente porque não é um site aleatoriamente possivelmente malicioso, nem um hack-splash de marcação maluca - mas conciso e bem formatado - o uso de sed
etc. é OK (IMHO).
Olhando mais para o pdfl-000.html
, descobrimos que o título está entre <h2 class="element-invisible">
e .pdf
. O link para o documento <a
tem type="application/pdf
.
Com isso como base, podemos extrair rapidamente todos os títulos e destinos com, por exemplo, sed
. Como o resultado de sed
nos dá title e URI em linhas alternadas, podemos canalizar o resultado para paste - -
.
Como a numeração dos itens seria boa, nós canalizamos mais para awk
para adicionar algum nome de documento alterado. Isso também provavelmente nos salvará se dois documentos tiverem o mesmo título.
Nesse exemplo bruto, supomos que nenhum nome tenha tab
, newline
ou "
como parte dele.
sed -n -e 's#.*<h2 class="element-invisible"><a [^>]*>\([^<]*\.pdf\)</a>.*</h2>##p' \
-e 's#.*<a[^>]* href="\([^"]*\)"[^<]*type="application/pdf;.*#"https://mises.org"#p' \
pdfl-* | \
paste - - | \
awk -F'\t' '{ printf "curl -o \"%03d-%s\" %s\n",NR,$1,$2 }' > curl.txt
Download
Então é simplesmente fazer:
mkdir pdf
cd pdf
. ../curl.txt
e aguarde o download. Terminando com algo como:
001-A Spontaneous Order.pdf
002-Science Technology and Government.pdf
003-Science Technology and Government—Chinese.pdf
004-The Next Generation of Austrian Economics Essays in Honor of Joseph T. Salerno.pdf
005-A Short History of Man — Progress and Decline.pdf
...
Nota lateral
-
Guarde os arquivos
pdfl-NNN.html
se você quiser extrair mais informações dos arquivos. -
Uma rápida soma de todos os PDFs usando o valor
lenghth=NNN
da URL mostra um total de 7401933553 bytes ou 6,89 GiB para download: P