-
Notifications
You must be signed in to change notification settings - Fork 3
/
sismoiCrawler.py
54 lines (45 loc) · 2.14 KB
/
sismoiCrawler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import urllib
from bs4 import BeautifulSoup
import requests
import os
# url base que deve ser varrida procurando os arquivos
url = 'http://www.cprm.gov.br/publique/Gestao-Territorial/Geologia-de-Engenharia-e-Riscos-Geologicos/Setorizacao-de-Riscos-Geologicos-4138.html'
# diretório destino para salvamento dos arquivos, com a máscara onde entrará o nome do arquivo
destdirmask = r'D:\Atrium\Projects\SISMOI\DADOS\RiscosGeologicos\{0}'
# filtro dos links a serem investigados
filterstr = '=282'
# tipo de arquivo a ser buscado
extensao = '.zip'
conn = urllib.request.urlopen(url)
html = conn.read()
# obtém os links existentes na página
soup = BeautifulSoup(html, 'lxml')
links = soup.find_all('a')
# percorre os links
for tag in links:
link = tag.get('href',None)
if link is not None:
if filterstr in link.lower():
print('******************************* ',link)
conn=urllib.request.urlopen(r'http://www.cprm.gov.br'+link)
html=conn.read()
# obtém os links existentes na página
soup = BeautifulSoup(html, 'lxml')
links = soup.find_all('a')
# percorre os links
for tag in links:
link=tag.get('href',None)
if link is not None:
if '.zip' in link.lower():
print('Baixando {0}'.format(link))
# tratamento de exceção porque erros estranhos podem acontecer aqui, melhor ignorar
# pro programa não parar
try:
fname=destdirmask.format(os.path.split(link)[1])
# aqui ele testa pra ver se o arquivo já foi baixado.
# Necessário se vc for reiniciar o programa sem querer baixar arquivos já baixados antes
if not os.path.isfile(fname):
zipF=requests.get(link, allow_redirects=True)
open(fname, 'wb').write(zipF.content)
except Exception:
pass