-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcrawler_exemplo
72 lines (55 loc) · 1.73 KB
/
crawler_exemplo
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package inflacao
import (
"strconv"
"strings"
"time"
"github.com/gocolly/colly"
)
type DataDividaPublica struct {
Referencia string `json:"referencia" csv:"referencia"`
Ano string `json:"ano" csv:"ano"`
Mes string `json:"mes" csv:"mes"`
Valor float64 `json:"valor" csv:"valor_pib"`
}
type DividaPublica struct {
Atualizacao time.Time `json:"data_atualizacao"`
Fonte string `json:"fonte"`
UnidadeMedida string `json:"unidade_medida`
Data []DataDividaPublica `json:"data"`
}
func RunnerDividaPublica() {
url := "http://www.ipeadata.gov.br/exibeserie.aspx?serid=38388"
domain := "www.ipeadata.gov.br"
unidadeMedida := "% do PIB"
indice := &DividaPublica{}
indice.Atualizacao = time.Now()
indice.Fonte = domain
indice.UnidadeMedida = unidadeMedida
c := colly.NewCollector(
colly.AllowedDomains(domain),
)
// Callback para o evento de conclusão do request
c.OnHTML(".dxgvTable", func(e *colly.HTMLElement) {
// Iteração dos itens das tabelas da página
e.ForEach("tr", func(i int, tr *colly.HTMLElement) {
// Recuperando e tratando itens da página
mes_referencia_td := strings.Replace(tr.ChildText("td:nth-child(1)"), ",", ".", -1)
valor_td := strings.Replace(tr.ChildText("td:nth-child(2)"), ",", ".", -1)
valor, err := strconv.ParseFloat(strings.TrimSpace(valor_td), 64)
// Mais conversões e tratamentos de dados
// ...
item := DataDividaPublica{
Referencia: referencia,
Valor: valor,
Ano: ano,
Mes: mes,
}
// Adicionando o registro ao dataset
indice.Data = append(indice.Data, item)
})
// Salvando em datasets intermediários
// ...
})
// Visitando a URL
c.Visit(url)
}