Autor Tópico: Diário: Machine Learning - Desenvolvendo Algorítimo para Betfair Exchange  (Lida 11431 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

SOMA247

  • Devedor
  • Estado:
    Offline
  • Registo: Mar 2019
  • Localidade:
  • Mensagens:
    134
  • Nacionalidade: br
  • Pts Tipsr:
    0

Pelo que percebi do teu projeto pretendes aplicar um algoritmo de inteligência artificial.
Para gerares um modelo com estes algoritmos precisas algo do género:
Resultado_Final ~ Variavel_1 + Variavel_2 + Variavel_3 + ...
Integrar gráficos, ainda por cima dinâmicos nesta equação parece-me complicado.

Se estivesse agora a iniciar-me começava por algo simples. Por exemplo:
Total_golos_FT ~ Media_Marcados_Casa + Media_Sofridos_Casa + Media_Marcados_Visitante + Media_Sofridos_Visitante

Oi 3monkeys, o gráfico é fundamental para o projeto, as apostas serão exclusivamente ao vivo e no mercado de gols. É simples interpretar os dados do gráfico, é só conseguir fazer o scraping automaticamente e nao será difícil integrar.

A primeira coisa é fazeres-te passar por um browser e não por um BOT.
Uma vez que usas o selenium talvez isto não seja problema.
Tanto quanto sei o selenium liga-se a um browser, não é?
Se assim for, imagino que os sites apenas "vejam" um browser e não um bot.

O que acabei de dizer apenas impede que eles detetem que estejas a usar um bot mas não impede que possam suspeitar que estejas a usar um. Imagina que alguém consulta 50 páginas num minuto. Bastante improvável que seja apenas um humano a consultar páginas no seu browser, não achas?

---

Apenas duas coisas que deves ter em atenção quanto ao webscraping:
- Poucos pedidos por segundo (Não existe um nº standard mas 1 pedido a cada 5/15 segundos são numeros bastante usados)
- respeitar o robots.txt (podes estar a cometer uma infração se copiares uma parte de um site que não é permitida)

No caso do sofascore não é permitido copiar as tabelas classificativas.
No robots.txt encontras uma entrada a dizer:
Disallow: /tournament/

Fica bem e força aí no teu projeto  :bom:

É exatamente isso, eu digo BOT por que o sistema será todo integrado mas é o Selenium através do WebDriver que faz as requisições, a ideia inicial como vc disse  é aumentar o tempo para evitar o captcha quando o site detecta que não é um humano acessando.

Estes últimos 10 dias não tenho conseguido evoluir, parte pela complexidade parte pela falta de tempo, obrigado pela força amigo.



Codigo13

  • Milionário
  • Estado:
    Offline
  • Registo: Fev 2010
  • Localidade: São Paulo
  • Mensagens:
    1754
  • Nacionalidade: br
  • Pts Tipsr:
    16
Se pode acessar "Attack momentum"  através aplicação embarcada  como no link  https://www.sofascore.com/pt/event/8273985/attack-momentum/embed 

Mas o gráfico de barras é gerado por um javascript que recebe os dados desse arquivo JSON   https://www.sofascore.com/event/8273985/json

Os valores Attack Momentum ficam na lista da propriedade LiveForm como exemplo abaixo.  Fica bem fácil de pegar, perceba cada elemento da lista tem


  "liveForm": [
    {
      "minute": 1,
      "value": 21
    },
    {
      "minute": 2,
      "value": 24
    },
    {
      "minute": 3,
      "value": 38
    },
    {
      "minute": 4,
      "value": 31
    },
    {
      "minute": 5,
      "value": 23
    },
    {
      "minute": 6,
      "value": 15
    },
    {
      "minute": 7,
      "value": 14
    },
    {
      "minute": 8,
      "value": 22
    },
    {
      "minute": 9,
      "value": 46
    },
    {
      "minute": 10,
      "value": 32
    },
    {
      "minute": 11,
      "value": 31
    },
    {
      "minute": 12,
      "value": 23
    },
    {
      "minute": 13,
      "value": 26
    },
    {
      "minute": 14,
      "value": 17
    },
    {
      "minute": 15,
      "value": 20
    },
    {
      "minute": 16,
      "value": 7
    },
    {
      "minute": 17,
      "value": 7
    },
    {
      "minute": 18,
      "value": 4
    },
    {
      "minute": 19,
      "value": -5
    },
    {
      "minute": 20,
      "value": -14
    },
    {
      "minute": 21,
      "value": -5
    },
    {
      "minute": 22,
      "value": 9
    },
    {
      "minute": 23,
      "value": 9
    },
    {
      "minute": 24,
      "value": 19
    },
    {
      "minute": 25,
      "value": -15
    },
    {
      "minute": 26,
      "value": 5
    },
    {
      "minute": 27,
      "value": -18
    },
    {
      "minute": 28,
      "value": -12
    },
    {
      "minute": 29,
      "value": -4
    },
    {
      "minute": 30,
      "value": 31
    },
    {
      "minute": 31,
      "value": 35
    },
    {
      "minute": 32,
      "value": 28
    },
    {
      "minute": 33,
      "value": 22
    },
    {
      "minute": 34,
      "value": 9
    },
    {
      "minute": 35,
      "value": -14
    },
    {
      "minute": 36,
      "value": -2
    },
    {
      "minute": 37,
      "value": 3
    },
    {
      "minute": 38,
      "value": 5
    },
    {
      "minute": 39,
      "value": 21
    },
    {
      "minute": 40,
      "value": 16
    },
    {
      "minute": 41,
      "value": 13
    },
    {
      "minute": 42,
      "value": 8
    },
    {
      "minute": 43,
      "value": 11
    },
    {
      "minute": 44,
      "value": 2
    },
    {
      "minute": 45,
      "value": 4
    },
    {
      "minute": 45.5,
      "value": 32
    },
    {
      "minute": 46,
      "value": -29
    },
    {
      "minute": 47,
      "value": -23
    },
    {
      "minute": 48,
      "value": -6
    },
    {
      "minute": 49,
      "value": -38
    },
    {
      "minute": 50,
      "value": -5
    },
    {
      "minute": 51,
      "value": 25
    },
    {
      "minute": 52,
      "value": 8
    },
    {
      "minute": 53,
      "value": 14
    },
    {
      "minute": 54,
      "value": 41
    },
    {
      "minute": 55,
      "value": 23
    },
    {
      "minute": 56,
      "value": -21
    },
    {
      "minute": 57,
      "value": -2
    },
    {
      "minute": 58,
      "value": 13
    },
    {
      "minute": 59,
      "value": 14
    },
    {
      "minute": 60,
      "value": 29
    },
    {
      "minute": 61,
      "value": 14
    },
    {
      "minute": 62,
      "value": 10
    },
    {
      "minute": 63,
      "value": -26
    },
    {
      "minute": 64,
      "value": -11
    },
    {
      "minute": 65,
      "value": -1
    },
    {
      "minute": 66,
      "value": 19
    },
    {
      "minute": 67,
      "value": -39
    },
    {
      "minute": 68,
      "value": -17
    },
    {
      "minute": 69,
      "value": -6
    },
    {
      "minute": 70,
      "value": 57
    },
    {
      "minute": 71,
      "value": 28
    },
    {
      "minute": 72,
      "value": 24
    },
    {
      "minute": 73,
      "value": 11
    },
    {
      "minute": 74,
      "value": 8
    },
    {
      "minute": 75,
      "value": 2
    },
    {
      "minute": 76,
      "value": 1
    },
    {
      "minute": 77,
      "value": 12
    },
    {
      "minute": 78,
      "value": 20
    },
    {
      "minute": 79,
      "value": 62
    },
    {
      "minute": 80,
      "value": 39
    },
    {
      "minute": 81,
      "value": 30
    },
    {
      "minute": 82,
      "value": 32
    },
    {
      "minute": 83,
      "value": 38
    },
    {
      "minute": 84,
      "value": 24
    },
    {
      "minute": 85,
      "value": 41
    },
    {
      "minute": 86,
      "value": 19
    },
    {
      "minute": 87,
      "value": 3
    },
    {
      "minute": 88,
      "value": -6
    },
    {
      "minute": 89,
      "value": -28
    },
    {
      "minute": 90,
      "value": -18
    },
    {
      "minute": 90.5,
      "value": -7
    }
  ],


Caso ainda não saiba, recomendo estudar como trabalhar com arquivos JSON, é muito últil ( esse formato se tornou padrão para troca de dados na web)  para uma melhor visualização recomendo essa extensão do Chrome
https://chrome.google.com/webstore/detail/json-viewer/aimiinbnnkboelefkjlenlgimcabobli?hl=pt-BR
« Última modificação: 10 de Julho de 2019, 19:24 por Codigo13 »
10 Campeonatos Brasileiros
3 Copas do Brasil

Maior campeão do Brasil, Verdão Querido!
#verdeécordainveja



SOMA247

  • Devedor
  • Estado:
    Offline
  • Registo: Mar 2019
  • Localidade:
  • Mensagens:
    134
  • Nacionalidade: br
  • Pts Tipsr:
    0
Se pode acessar "Attack momentum"  através aplicação embarcada  como no link  https://www.sofascore.com/pt/event/8273985/attack-momentum/embed 

Mas o gráfico de barras é gerado por um javascript que recebe os dados desse arquivo JSON   https://www.sofascore.com/event/8273985/json

Os valores Attack Momentum ficam na lista da propriedade LiveForm como exemplo abaixo.  Fica bem fácil de pegar, perceba cada elemento da lista tem

Caso ainda não saiba, recomendo estudar como trabalhar com arquivos JSON, é muito últil ( esse formato se tornou padrão para troca de dados na web)  para uma melhor visualização recomendo essa extensão do Chrome
https://chrome.google.com/webstore/detail/json-viewer/aimiinbnnkboelefkjlenlgimcabobli?hl=pt-BR

Excelente resposta @Codigo13
Você entendeu exatamente o que eu buscava, por coincidência poucos minutos antes consegui pegar os dados do gráfico com ajuda do tutorial que postei:

==========================================

from selenium import webdriver

driver = webdriver.Chrome('chromedriver.exe')
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
options.add_argument('--headless')
driver = webdriver.Chrome('chromedriver.exe', chrome_options = options)

driver.get('https://www.sofascore.com/pt/panama-jamaica/uVbsodc/')
page_source = driver.page_source

==========================================

Porém a maneira que você fez parece melhor, agora vou estudar uma forma de gravar os dados em xml.
Muito obrigado cara, vc é ***** nos códigos, se não fosse pela sua ajuda acho que já teria desistido do projeto meses atrás,
Abraço
João



Forum de Apostas

Re: Diário: Machine Learning - Desenvolvendo Algorítimo para Betfair Exchange
« Responder #137 em: 11 de Julho de 2019, 03:44 »

Codigo13

  • Milionário
  • Estado:
    Offline
  • Registo: Fev 2010
  • Localidade: São Paulo
  • Mensagens:
    1754
  • Nacionalidade: br
  • Pts Tipsr:
    16
Que bom que pude ajudar. Mas quebrar a cabeça e encontrar outra forma foi muito bom. Quando mais opções temos para fazer algo melhor.
E sempre que agente se força para aprender algo novo é bom, porque mesmo que não utilizemos nesse momento, no futuro pode ser útil necessário.

Você @SOMA247  é exemplo de superação, pois tinha um objetivo, estudou bastante, foi disciplinado e agora está cada vez mais próximo. O melhor de tudo isso, compartilhou com agente, fazendo outras pessoas também não desistam dos seus objetivos.

10 Campeonatos Brasileiros
3 Copas do Brasil

Maior campeão do Brasil, Verdão Querido!
#verdeécordainveja



SOMA247

  • Devedor
  • Estado:
    Offline
  • Registo: Mar 2019
  • Localidade:
  • Mensagens:
    134
  • Nacionalidade: br
  • Pts Tipsr:
    0
Diário Dia 124
12 de Julho  de 2019

Após alguns dias de estudos e a importante ajuda do @Codigo13 consegui capturar e tratar os dados do SofaScore Attack Momentum.



Na imagem abaixo destaquei o período que vamos estudar, do minuto 40 ao 45. A pressão das equipes é representada por valores posivitos e negativos onde os  positivos são do time da casa e os negativos do visitante.



Os valores que iremos guardar para o estudo são:

Pressão Total = 51
Pressão Home = 46
Pressão Away = 5
« Última modificação: 12 de Julho de 2019, 16:43 por SOMA247 »



SOMA247

  • Devedor
  • Estado:
    Offline
  • Registo: Mar 2019
  • Localidade:
  • Mensagens:
    134
  • Nacionalidade: br
  • Pts Tipsr:
    0
Banco de Dados FIFA 19

Ao mesmo tempo que tenho trabalhado no Web Scraping estou modelando minha própria versão do banco de dados do jogo FIFA 19, retirei muitos atributos deixando apenas:

Nome
Idade
Altura
Clube
Nota geral
Potencial
Posição
Número Camisa
Valor de Mercado




Download Versão Original >> https://www.kaggle.com/karangadiya/fifa19



SOMA247

  • Devedor
  • Estado:
    Offline
  • Registo: Mar 2019
  • Localidade:
  • Mensagens:
    134
  • Nacionalidade: br
  • Pts Tipsr:
    0
Diário Dia 131
19 de Julho  de 2019

Tenho andado um pouco sumido por que essa semana trabalhei bastante como trader nos jogos  das copas da Europa.
O projeto continua caminhando, consegui pegar os dados da BetsAPI "na marra", estou fazendo tudo de forma automática com Beautiful Soup + Selenium, logo consigo coletar, agrupar e filtrar todos os dados necessários.






SOMA247

  • Devedor
  • Estado:
    Offline
  • Registo: Mar 2019
  • Localidade:
  • Mensagens:
    134
  • Nacionalidade: br
  • Pts Tipsr:
    0
Diário Dia 132
20 de Julho  de 2019

Nós que trabalhamos com futebol e assistimos dezenas de jogos por semana, depois de algum tempo percebemos que existem situações que se repetem com a frequência maior do que as odds nos oferecem, este  o valor que buscamos no "live", é a retribuição do mercado pelo tempo dedicado, por estarmos  presentes.
 
Acredito que todo trader profissional tenha ao menos um BOT na cabeça, uma idéia para explorar o valor das repetições dos padrões do futebol. Mas como podemos transformar nossa idéia em um BOT de verdade? Existe pouco conteúdo na internet, em português não encontrei nada. É preciso ir aos poucos, na verdade diria que dividir o trabalho em unidades menores talvez seja a parte mais importante para não abandonar um projeto assim.

Eu comecei estudando artigos científicos, depois percebi que não seria possível contratar um programador freelancer, se você vai fazer um BOT precisa ter a liberdade de produzir seus próprios testes ou então encontrar uma pessoa que saiba programar e tenha o mesmo objetivo, tempo e dedicação que vc. Eu não encontrei uma pessoa assim então fui para opção 2: Aprender a programar o básico necessário.

Quando olho o print da imagem abaixo, que acabei de tirar, percebo o quanto evolui nestes poucos meses de estudo. Algum tempo atrás essa imagem  iria parecer grego pra mim, seria tão intimidante que sequer pensaria em aprender uma coisa dessas. E é este o motivo do texto, dizer que é muito menos complexo do que parece, que com uma hora por dia de estudo qualquer um aprende a programar, o importante é não desistir.

Eu não estudo programação  somente pra fazer esse BOT, gostaria de aplicar o que venho aprendendo em outras áreas também. Acredito que compeender o príncipio básico da programação é algo tão importante que inevitavelmente se tornará matéria obrigatória na grade curricular do ensino fundamental em breve.






Forum de Apostas

Re: Diário: Machine Learning - Desenvolvendo Algorítimo para Betfair Exchange
« Responder #142 em: 20 de Julho de 2019, 18:40 »

SOMA247

  • Devedor
  • Estado:
    Offline
  • Registo: Mar 2019
  • Localidade:
  • Mensagens:
    134
  • Nacionalidade: br
  • Pts Tipsr:
    0
Diário Dia 135
23 de Julho  de 2019

Com a volta dos campeonatos mais importantes estou tendo menos tempo para dedicar ao projeto, nos últimos dias trabalhei para pegar o link dos gréficos Attack Momentum automaticamente. O SofaScore envia dados por json.






SOMA247

  • Devedor
  • Estado:
    Offline
  • Registo: Mar 2019
  • Localidade:
  • Mensagens:
    134
  • Nacionalidade: br
  • Pts Tipsr:
    0
Diário Dia 137
25 de Julho  de 2019

Mais um passo no projeto,  tento não pensar muito longe por que é difícil mensurar o sistema como um "todo",  tenho ido de função em função.  Hoje programei um sistema para pegar os links de todos os gráficos Attack Momentum no SofaScore. Independente da liga o código será o mesmo.






Codigo13

  • Milionário
  • Estado:
    Offline
  • Registo: Fev 2010
  • Localidade: São Paulo
  • Mensagens:
    1754
  • Nacionalidade: br
  • Pts Tipsr:
    16
Muito bem, está caminhando
10 Campeonatos Brasileiros
3 Copas do Brasil

Maior campeão do Brasil, Verdão Querido!
#verdeécordainveja



SOMA247

  • Devedor
  • Estado:
    Offline
  • Registo: Mar 2019
  • Localidade:
  • Mensagens:
    134
  • Nacionalidade: br
  • Pts Tipsr:
    0
Diário Dia 138
26 de Julho  de 2019

Hoje pela primeira vez fui bloqueado por um site. O SofaScore baniu meu IP, mesmo fazendo menos de 30 requisições por minuto eles resolveram bloquear. Um dos princípios da Internet é a liberdade da informação, fica complicado criar regas para limitar o acesso a algo público.




Porém o problema já foi contornado  :bom: Vou deixar o código.

=======================================

import requests
from bs4 import BeautifulSoup
from itertools import cycle
import traceback

res = requests.get('https://free-proxy-list.net/', headers={'User-Agent':'Mozilla/5.0'})
soup = BeautifulSoup(res.text,"lxml")
proxies = set()
for items in soup.select("tbody tr"):
    proxy = ':'.join([item.text for item in items.select("td")[:2]])
    proxies.add(proxy)
    print(proxy)   

proxy_pool = cycle(proxies)

url = 'www.google.com'

for i in range(10):
    proxy = next(proxy_pool)
    print("Request #%d"%i)
    try:
        response = requests.get(url, proxies = {"http": proxy, "https": proxy})
        data = response.json()
    except:
        print("Skipping. Connnection error")

=======================================

O projeto avançou bastante nos últimos 2 dias, estou perto de terminar o sistema para coletar dados. O próximo passo será descobrir como alimentar a base  diariamente conforme os jogos forem acontecendo.



SOMA247

  • Devedor
  • Estado:
    Offline
  • Registo: Mar 2019
  • Localidade:
  • Mensagens:
    134
  • Nacionalidade: br
  • Pts Tipsr:
    0
Esqueci de mencionar, o código para acessar os sites de forma anônima via proxy foi baseado no conteúdo do ScrapeHero:



https://www.scrapehero.com/how-to-rotate-proxies-and-ip-addresses-using-python-3/
https://www.scrapehero.com/how-to-prevent-getting-blacklisted-while-scraping/
« Última modificação: 26 de Julho de 2019, 18:51 por SOMA247 »



Codigo13

  • Milionário
  • Estado:
    Offline
  • Registo: Fev 2010
  • Localidade: São Paulo
  • Mensagens:
    1754
  • Nacionalidade: br
  • Pts Tipsr:
    16
Eu também já fui bloqueado diversas vezes kkk. A solução foi usar proxy, o problema que numa encontrei um lista de proxy free que fosse boa.  Por um tempo, usei um serviço proxies pago lá da Rússia FineProxy
10 Campeonatos Brasileiros
3 Copas do Brasil

Maior campeão do Brasil, Verdão Querido!
#verdeécordainveja



SOMA247

  • Devedor
  • Estado:
    Offline
  • Registo: Mar 2019
  • Localidade:
  • Mensagens:
    134
  • Nacionalidade: br
  • Pts Tipsr:
    0
Eu também já fui bloqueado diversas vezes kkk. A solução foi usar proxy, o problema que numa encontrei um lista de proxy free que fosse boa.  Por um tempo, usei um serviço proxies pago lá da Rússia FineProxy

@Codigo13  ainda não sei como vou fazer quando precisar de agilidade com o "scanner" de jogos ao vivo, aindei procurando uns serviços pagos e as assinaturas variam entre 50  e 150 Euros/mês, não é tão barato. Essa lista de proxy que utilizei ta demorando mais de 1 minuto pra encontrar uma conexão que funcione  :s




 


Casas de Apostas: bet pt / Betclic / ESC Online / Nossa Aposta / Casino Portugal

Rede Apostaganha: Apostas / Palpites e Dicas de Apostas / Pronósticos de Apuestas / Betting Tips and Predictions