-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
64 lines (42 loc) · 2.58 KB
/
README
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
Pegar onibus em floripa é dificil. Se o sistema online ao menos fosse bom...
Sendo assim resolvi me dedicar a aprender algo de R e de raspagem de site por meio da biblioteca XML
e da biblioteca XPath.
Atualmente tenho quase todas as informações. Falta apenas uma, os dados de legenda, por exemplo quando um onibus é meia viagem, ou vai recolher, se ele possui assento para cadeirante, ou cego com cão guia e por ai vai.
Para ver o material usando o R:
Instale o R na sua maquina "debian-like" ou outras e em seguida instale a biblioteca XML:
ps.: você pode encontrar o R nós repositórios do CRAN, assim como infos para outras distros.
# em algum sh faça
sudo apt-get install r-base # instale o R
# rode o R na pasta horarios, ali esta o workspace
install.packages("XML") # instale a libXML
library(XML) #carregue a libXML
# Agora carregue os dois algoritimos de raspagem dos arquivos
source("scrap_bus_fields.R")
source("scrap_bus_list.R")
# os dois algoritimos recebem um xpath, o primeiro retorna uma lista com informação de um onibus em cada linha, o segundo retorna uma lista de listas com cada lista representando por exemplo horarios.
Com as linhas abaixo consigo obter a maior parte das informações do onibus menos, horario itinerario e referencias:
linhas = scrap_fields("//td[2]/h1/text()")
tarifa_cartao = scrap_fields("//div[4]/table[1]/tr[2]/td[2]/text()")
tarifa_dinheiro = scrap_fields("//tr[2]/td[4]/text()")
tempo_medio_ida = scrap_fields("//tr[3]/td[2]/text()")
tempo_medio_volta = scrap_fields("//tr[3]/td[4]/text()")
extensao_ida = scrap_fields("//tr[4]/td[2]/text()")
extensao_volta = scrap_fields("//tr[4]/td[4]/text()")
notas_da_linha = scrap_fields("//tr[5]/td[2]/text()")
Essas consigo por meio do outro algoritimo que tem uma diferreça minima:
dia_da_semana.A = scrap_fields("//table[3]/tr[1]/td[1]/h1/text()")
horarios.A = scrap_list("//table[4]/tr[*]/td[*]/p/text()")
Isso é feito ate a letra F (6 horarios - mais ou menos - seg-sex, sab, dom)
Para tal basta fazer 6 iterações com um incremento de table[n+2]
#########################################################################################
For install new gems:
* bundle install --path vendor/bundle
List of commands to generate new models:
* rails g model place name:string
* install gem acts_as_list
* rails g migration AddPositionToPlace position:integer
* rails g model reference
* rails g model route
* set up the 3 new models accordly of page https://github.com/swanandp/acts_as_list
See help for gem acts_as_list
* https://github.com/swanandp/acts_as_list/blob/master/lib/acts_as_list/active_record/acts/list.rb