Baixando PDFs

22 views
Skip to first unread message

Frederico Barbosa

unread,
Oct 18, 2021, 4:03:59 PMOct 18
to Python Brasil
Olá pessoal.
Estou tentando baixar uma lista de PDFs que está neste link (https://www.snh2021.anpuh.org/site/anais) com o código abaixo.
Quando deixo o código rodando até a linha 11, consigo imprimir a lista de links normalmente, mas não sei como inserir apenas os links de extensão.pdf.
Quando rodo o código todo, obtenho o erro descrito abaixo.
Alguém poderia me ajudar?

import requests
import httplib2
import os
from bs4 import BeautifulSoup, SoupStrainer
artigos = []
http = httplib2.Http()
status, response = http.request('https://www.snh2021.anpuh.org/site/anais')
for link in BeautifulSoup(response, parse_only=SoupStrainer('a')):
    if link.has_attr('href'):
        artigos.append(link['href'])
        print(artigos)
        def baixa_arquivo(url, endereco):
            resposta = requests.get(url)
            if resposta.status_code == requests.codes.OK:
                with open(endereco, 'wb') as novo_arquivo:
                    novo_arquivo.write(resposta.content)
                print('Download concluído. Salvo em {}'.format(endereco))
            else:
                resposta.raise_for_status()
        if __name__ == '__main__':
            url_basica = 'https://www.snh2021.anpuh.org/{}'
            output = 'Download'
            for i in range(0, len(artigos) + 1):
                nome_do_arquivo = os.path.join(output, 'artigo{}.pdf'.format(i))
                a = artigos[i]
                baixa_arquivo(url_basica.format(a), nome_do_arquivo)

ERRO:
C:\Downloads\webscraping\venv\Scripts\python.exe C:/Downloads/webscraping/requisicoes.py
C:\Downloads\webscraping\requisicoes.py:9: GuessedAtParserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("html.parser"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

The code that caused this warning is on line 9 of the file C:\Downloads\webscraping\requisicoes.py. To get rid of this warning, pass the additional argument 'features="html.parser"' to the BeautifulSoup constructor.

  for link in BeautifulSoup(response, parse_only=SoupStrainer('a')):
['site/capa']
Traceback (most recent call last):
  File "C:\Downloads\webscraping\requisicoes.py", line 26, in <module>
    a = artigos[i]
IndexError: list index out of range
Download concluído. Salvo em Download\artigo0.pdf

Process finished with exit code 1

Lucas Brahm

unread,
Oct 18, 2021, 4:16:46 PMOct 18
to python...@googlegroups.com
O erro está nesta linha:
for i in range(0, len(artigos) + 1):

Trocar por:
for i in range(1, len(artigos) + 1):

--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/702fafa0-937d-4cc7-a2ec-92cc08cc1468n%40googlegroups.com.

Frederico Barbosa

unread,
Oct 18, 2021, 4:30:54 PMOct 18
to python...@googlegroups.com
Olá, Lucas.
Eu já havia tentado, mas deu o erro IndexError: list index out of range
Frederico Barbosa
Engº. de Produção
Contato:
34 9 8864-3348


Lucas Brahm

unread,
Oct 18, 2021, 4:32:30 PMOct 18
to python...@googlegroups.com
Deve ter dado erro no último elemento.
Coloca
for i in range(0, len(artigos)):

Frederico Barbosa

unread,
Oct 19, 2021, 6:54:13 AMOct 19
to Python Brasil
Obrigado, Lucas. Deu certo!!
Reply all
Reply to author
Forward
0 new messages