Selecionar e copiar conteúdo de página usando apenas o terminal linux

Saudações, Preciso ler os dados de uma página mas da forma tradicional, usando XML para o exame e retenção dos dados eu não consigo. Os dados são de altura, idade, peso, enfim, de jogadores de futebol do campeonato brasileiro. Estão disponíveis nessa página, por exemplo, para o Fluminense *http://www.whoscored.com/Teams/1232 <http://www.whoscored.com/Teams/1232>* O que me interessa é a tabela com o nome dos jogadores, dados biométricos e esportivos. Um selecionar e copiar dessa porção que me interessa traz esse conteúdo. R Name Pos Age cm kg Apps Goal A Yel Red SpG PS% AW MoM Rt 1 Rafael Sóbis AM(LR),FW 28 172 67 2 2 - - - 3.5 78.8 1.5 - 7.82 2 Carlinhos D(L) 27 176 72 2 - - - - 1 81.1 1 1 7.57 3 Gum D(C) 28 189 86 2 - - - - 0.5 75.2 2.5 1 7.51 4 Wagner AM(C) 29 172 71 2 - - 1 - 3 90 - - 7.43 5 Bruno Vieira D(R) 28 178 69 2 - - - - - 85.9 1.5 - 7.23 6 Darío Conca M 30 167 58 2 - - 1 - 3 85.9 - - 7.21 7 Fred FW 30 185 75 2 1 2 - - 3 75.6 1.5 - 7.19 8 Diguinho DM(C) 31 171 70 2 - - - - 0.5 84.7 1.5 - 7.14 9 Elivelton D 21 179 81 2 - - - - - 74.6 0.5 - 6.86 10 Diego Cavalieri GK 31 191 86 2 - - - - - 46.2 - - 6.69 11 Jean DM(C) 27 170 70 2 - - - - 1 88.6 - - 6.61 12 Biro Biro AM(L) 19 164 55 0(1) - - - - 1 60 - - 6.47 13 Edwin Valencia M 29 181 85 0(2) - - - - - 81.8 1 - 6.31 14 Rafinha M(R) 20 177 74 0(1) - - - - - 50 - - 6 15 Walter FW 24 178 88 0(1) - - - - - 60 - - 5.95 16 Felipe GK 26 193 90 - - - - - - - - - - 17 Chiquinho AM(C) 24 170 69 - - - - - - - - - - 18 Kenedy FW 18 182 77 - - - - - - - - - - 19 Wellington Carvalho D 21 185 84 - - - - - - - - - - 20 Wellington Silva D 26 177 64 - - - - - - - - - - Quando eu peço o código fonte da página (acesso pelo botão direito do mouse no navegador firefox), não aparecem esses valores lá. Se aparecessem dava para usar o XML. Pelo jeito os dados são trazidos por uma consulta à uma base de dados on the fly para colocar na página. A única forma que eu sei de pegar é copiando para área de transferência. Eu tenho feito assim: 1. Abro a página de cada time no navegador e dou ctrol+a para selecionar todo o conteúdo; 2. Dou ctrol+c para copiar o conteúdo para área de transferência; 3. Dou control+v dentro de um arquivo texto; 4. Leio o arquivo texto no R, elimino a sujeira, organizo em colunas até chegar um data.frame. O que eu quero é substituir passos gráficos de 1 à 3 por algum comando do teminal linux que pudesse pegar a URL que eu passar e salvar o conteúdo em um aquivo que eu der o nome. Com isso elimino intervenção humana e rapidamente baixo todos os times, de todos os torneios para ter excelentes dados para trabalhar em aula. Se alguém se interessar, os dados da liga européia (56 times) que peguei no braço estão em *http://www.leg.ufpr.br/~walmes/data/euro_football_players.txt <http://www.leg.ufpr.br/~walmes/data/euro_football_players.txt>* Dei umas googladas e vi alguns comandos que, infelizmente, ainda não trazem o que eu preciso, como *sudo apt-get install lynx* *lynx -dump http://www.whoscored.com/Teams/1232 <http://www.whoscored.com/Teams/1232>* O recorte do resultado do comando está abaixo. View: [41]Overall [42]Home [43]Away R Name Pos Age cm kg Apps Goal A Yel Red SpG PS% AW MoM Rt <------ a tabela que eu queria era pra estar *Players shaded are players who are not currently active in team. <------ entre essas duas linhas, mas não. (Loaned, sold, etc..) Tournaments: [44]Brasileirão View: [45]Overall [46]Home [47]Away Caso alguém tenha algum caminho a apontar, fico grato. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Walmes, Eu baixei a página http://www.whoscored.com/Teams/1232 usando o curl no Terminal do Mac. Rodei curl http://www.whoscored.com/Teams/1232 > 1232.html abri o arquivo 1232.html num editor de texto e dentro dele tinha uma tabela com estes dados que te interessam. Só que eles estão um poco desorganizados. O que vejo para o Rafael Sóbis é o seguinte: {"TeamId":1232,"PlayerId":15686,"Field":{"Value":2,"DisplayName":"Overall"},"IsCurrentPlayer":true,"GameStarted":2,"SubOn":0,"SubOff":2,"Yellow":0,"SecondYellow":0,"Red":0,"Goals":2,"Assists":0,"TotalPasses":80,"AccuratePasses":63,"AerialWon":3,"AerialLost":1,"Rating":7.82,"ManOfTheMatch":0,"TotalTackles":1,"Interceptions":2,"Fouls":2,"OffsidesWon":0,"TotalClearances":0,"WasDribbled":1,"TotalShots":7,"ShotsOnTarget":7,"ShotsBlocked":0,"OwnGoals":0,"KeyPasses":2,"Dribbles":0,"WasFouled":0,"Offsides":1,"Dispossesed":2,"Turnovers":5,"TotalCrosses":13,"AccurateCrosses":1,"TotalLongBalls":3,"AccurateLongBalls":3,"TotalThroughBalls":0,"AccurateThroughBalls":0,"RegionCode":"br","TeamRegionCode":"br","TeamName":"Fluminense","PositionText":"Forward","PlayedPositionsRaw":"-AML-AMR-FW-","Height":172,"Weight":67,"FirstName":"Rafael Augusto","LastName":"Sóbis do Nascimento","KnownName":"Rafael Sóbis","WSName":"Rafael Sóbis","DateOfBirth":"\/Date(487810800000)\/","Ranking":1,"PositionShort":"AM(LR),FW","PositionLong":"Attacking Midfielder (Left, Right) / Forward","Name":"Rafael Sóbis","Age":28} Eu não sei trabalhar com xml, então não sei te dizer se daria para extrair algum dado deste html utilizando algo nesta linhas. Entretanto, acho que daria para extrair algo daí utilizando sed ou awk. Abs, 2014-04-30 15:32 GMT-03:00 walmes . <walmeszeviani@gmail.com>:
Saudações,
Preciso ler os dados de uma página mas da forma tradicional, usando XML para o exame e retenção dos dados eu não consigo. Os dados são de altura, idade, peso, enfim, de jogadores de futebol do campeonato brasileiro. Estão disponíveis nessa página, por exemplo, para o Fluminense
*http://www.whoscored.com/Teams/1232 <http://www.whoscored.com/Teams/1232>*
O que me interessa é a tabela com o nome dos jogadores, dados biométricos e esportivos. Um selecionar e copiar dessa porção que me interessa traz esse conteúdo.
R Name Pos Age cm kg Apps Goal A Yel Red SpG PS% AW MoM Rt 1 Rafael Sóbis AM(LR),FW 28 172 67 2 2 - - - 3.5 78.8 1.5 - 7.82 2 Carlinhos D(L) 27 176 72 2 - - - - 1 81.1 1 1 7.57 3 Gum D(C) 28 189 86 2 - - - - 0.5 75.2 2.5 1 7.51 4 Wagner AM(C) 29 172 71 2 - - 1 - 3 90 - - 7.43 5 Bruno Vieira D(R) 28 178 69 2 - - - - - 85.9 1.5 - 7.23 6 Darío Conca M 30 167 58 2 - - 1 - 3 85.9 - - 7.21 7 Fred FW 30 185 75 2 1 2 - - 3 75.6 1.5 - 7.19 8 Diguinho DM(C) 31 171 70 2 - - - - 0.5 84.7 1.5 - 7.14 9 Elivelton D 21 179 81 2 - - - - - 74.6 0.5 - 6.86 10 Diego Cavalieri GK 31 191 86 2 - - - - - 46.2 - - 6.69 11 Jean DM(C) 27 170 70 2 - - - - 1 88.6 - - 6.61 12 Biro Biro AM(L) 19 164 55 0(1) - - - - 1 60 - - 6.47 13 Edwin Valencia M 29 181 85 0(2) - - - - - 81.8 1 - 6.31 14 Rafinha M(R) 20 177 74 0(1) - - - - - 50 - - 6 15 Walter FW 24 178 88 0(1) - - - - - 60 - - 5.95 16 Felipe GK 26 193 90 - - - - - - - - - - 17 Chiquinho AM(C) 24 170 69 - - - - - - - - - - 18 Kenedy FW 18 182 77 - - - - - - - - - - 19 Wellington Carvalho D 21 185 84 - - - - - - - - - - 20 Wellington Silva D 26 177 64 - - - - - - - - - -
Quando eu peço o código fonte da página (acesso pelo botão direito do mouse no navegador firefox), não aparecem esses valores lá. Se aparecessem dava para usar o XML. Pelo jeito os dados são trazidos por uma consulta à uma base de dados on the fly para colocar na página. A única forma que eu sei de pegar é copiando para área de transferência.
Eu tenho feito assim: 1. Abro a página de cada time no navegador e dou ctrol+a para selecionar todo o conteúdo; 2. Dou ctrol+c para copiar o conteúdo para área de transferência; 3. Dou control+v dentro de um arquivo texto; 4. Leio o arquivo texto no R, elimino a sujeira, organizo em colunas até chegar um data.frame.
O que eu quero é substituir passos gráficos de 1 à 3 por algum comando do teminal linux que pudesse pegar a URL que eu passar e salvar o conteúdo em um aquivo que eu der o nome. Com isso elimino intervenção humana e rapidamente baixo todos os times, de todos os torneios para ter excelentes dados para trabalhar em aula. Se alguém se interessar, os dados da liga européia (56 times) que peguei no braço estão em
*http://www.leg.ufpr.br/~walmes/data/euro_football_players.txt <http://www.leg.ufpr.br/~walmes/data/euro_football_players.txt>*
Dei umas googladas e vi alguns comandos que, infelizmente, ainda não trazem o que eu preciso, como
*sudo apt-get install lynx* *lynx -dump http://www.whoscored.com/Teams/1232 <http://www.whoscored.com/Teams/1232>*
O recorte do resultado do comando está abaixo.
View: [41]Overall [42]Home [43]Away
R Name Pos Age cm kg Apps Goal A Yel Red SpG PS% AW MoM Rt <------ a tabela que eu queria era pra estar *Players shaded are players who are not currently active in team. <------ entre essas duas linhas, mas não. (Loaned, sold, etc..)
Tournaments: [44]Brasileirão
View: [45]Overall [46]Home [47]Away
Caso alguém tenha algum caminho a apontar, fico grato. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Marcus Nunes http://marcusnunes.me/

Senhores, Como alguns apontaram os dados que preciso vem dando um curl no url. Com código python sugerido pelo Alisson de alguma forma identifica a estrutura com que é organizada os dados e já retorna em tabela. Será que não teria uma forma de imitar o que python faz pelo R? Eu suspeito que seja uma estrutura possível de passar um "parsador". Se fosse html ou xml daria para usar um XML::htmlTreeParse(), mas pelo pouco que conheço é outra forma de organização. Atualmente eu tô fazendo assim mas eu gostaria de melhorar o código. ##----------------------------------------------------------------------------- ## Lê e joga em arquivo testo. system("curl http://www.whoscored.com/Teams/1232 > page.txt") ## Pega só a linha com o conteúdo que interessa e joga em outro ## arquivo. Em seguida substitui as aspas por espaço vazio (quando não ## necessárias, aspas não são bem vindas). system("grep \"DataStore.prime('stage-player-stat'\" page.txt > line.txt") system("sed 's/'\\\"'//g' line.txt > Line.txt") x <- readLines("Line.txt") str(x) ## 1 quebra. x <- unlist(strsplit(x, split="\\[\\{")) str(x) ## 2 quebra. y <- unlist(strsplit(x[2], split="\\},\\{")) str(y) ## Substituição de `,` por `;`. y <- gsub(",(\\S)", ";\\1", y) str(y) ## Quebra os campos. z <- strsplit(y, split=";") str(z) ## Organização. L <- lapply(z, function(w){ w <- strsplit(w, ":") i <- sapply(w, length)==2 w <- w[i] x <- do.call(rbind, w) y <- x[,2] y <- gsub("\\W", "", y) names(y) <- x[,1] y }) M <- do.call(rbind, L) M <- as.data.frame(M, stringsAsFactors=FALSE) M <- as.data.frame(lapply(M, function(x){ y <- as.integer(x) if(all(is.na(y))) return(x) else return(y) }), stringsAsFactors=FALSE) str(M) ##----------------------------------------------------------------------------- Eu sei que tem partes não elegantes aí. O tratamento dos dados não é perfeito. Requer muito ajuste fino e é por isso que acredito que deve ter uma forma mais simples. A minha suspeita é se não tem como imitar o que é feito pelo python na sugestão do Alisson. Outro ponto é que essa base de dados tem 57 colunas. Tem muita informação. Tem valores se o jogador deu ou levou foi drible. Se ele levou cartão amarelo uma ou duas vezes e se levou vermelho. Veja um recorde do str(). $ Yellow : int 0 0 0 1 0 1 0 0 0 0 ... $ SecondYellow : int 0 0 0 0 0 0 0 0 0 0 ... $ Red : int 0 0 0 0 0 0 0 0 0 0 ... $ AerialWon : int 3 2 5 0 3 0 3 3 1 0 ... $ AerialLost : int 1 0 3 0 2 1 7 1 4 0 ... $ WasDribbled : int 1 2 0 1 1 3 1 1 1 0 ... $ Dribbles : int 0 2 0 0 4 2 0 1 0 0 ... $ Height : int 172 176 189 172 178 167 185 171 179 191 ... $ Weight : int 67 72 86 71 69 58 75 70 81 86 ... Quantas disputas de bolas aéreas ganhas ou perdidas. Só nessa dá pra ver se a chance de ganhar uma disputa aérea depende da altura do jogador, um típico binomial. É muito produtivo trabalhar com dados assim em aula, por isso o empenho em obtê-los. Grato a todos pela ajuda, fico no aguardo por qualquer novidade. Walmes.

Walmes e colegas, bom dia! Fins uns testes, mas ainda não pude finalizar... De qualquer modo vou postar porque acredito que possa ajudar... A dificuldade que vejo é que os dados não estão no HTML propriamente, mas sim no código JavaScript embutido. ### <code r> sapply(c("RCurl", "XML", "RJSONIO"), require, character.only=T) webpage <- getURL("http://www.whoscored.com/Teams/1232") webpage <- readLines(tc <- textConnection(webpage)); close(tc) # pagetree <- htmlTreeParse(webpage, error=function(...){}, useInternalNodes = TRUE) sel <- grep("DataStore.prime\\(\\'stage-player-stat\\'", webpage) ### localiza linha com var data <- webpage[sel] ### seleciona linha data <- gsub("^.*DataStore.*\\[|\\]);", "", data) ### limpeza para deixar no formato JSON data2 <- gsub(",\\{", "@@@\\{", data) ### inserir quebra list <- unlist(strsplit(tmp, '@@@')) ### quebrar múltiplas linhas fromJSON(list[1]) fromJSON(list[2]) fromJSON(list[20]) ### </code> Éder Comunello <c <comunello.eder@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]

Senhores, bom dia! Melhorei o código anterior e agora já está capturando os dados em um objeto do tipo lista. Falta passar de lista pra data.frame... Ainda não fiz porque os elementos da lista estão com tamanhos diferentes e tenho que pensar numa estratégia. Se tiverem interesse e puderem finalizar, fiquem à vontade. ### <code r> setwd("C:/LAB/RBAS/dataMining") sapply(c("RCurl", "XML", "RJSONIO"), require, character.only=T) html.ori <- getURL("http://www.whoscored.com/Teams/1232") html.lin <- readLines(tcon <- textConnection(html.ori)); close(tcon) # pagetree <- htmlTreeParse(html.lin, error=function(...){}, useInternalNodes = TRUE) sel <- grep("DataStore.prime\\(\\'stage-player-stat\\'", html.lin) data <- html.lin[sel] djson <- gsub("^.*DataStore.*\\[(.*)\\]);", "\\[\\1\\]", data) res <- fromJSON(djson) res ### <code> Éder Comunello <c <comunello.eder@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]

Senhores, bom dia! Não sei se ainda há interesse na questão, mas retomei a ideia data mining do whoscored.com e gostaria de compartilhar uma solução. No código apliquei só para o Fluminense, mas já gerei os índices pra montar o loop para outros times (objeto teams ou teamID). ### <code r> # setwd(choose.dir()) setwd("C:/LAB/RBAS/dataMining") sapply(c("RCurl", "XML", "RJSONIO"), require, character.only=T) # browseURL("http://www.whoscored.com/Teams/1232") myURL <- "http://www.whoscored.com/Teams/1232" htmRaw <- getURL(myURL) htmLin <- readLines(txtCon <- textConnection(htmRaw)); close(txtCon) ### Teams (IDs for future looping) pageTree <- htmlTreeParse(htmLin, error=function(...){}, useInternalNodes = TRUE) teamsNames <- as.character(xpathApply(pageTree, "//*/select[@id='teams']//option", xmlValue)) teamsID <- xpathApply(pageTree, "//*/select[@id='teams']//option") teamsID <- sapply(teamsID, xmlGetAttr, 'value') teamsID <- as.integer(gsub("^.*Teams\\/(.*)", "\\1", teamsID)) teams <- data.frame(teamsID, teamsNames, stringsAsFactors=F); teams ### Info about a specific team (Fluminense) sLin <- grep("DataStore.prime\\(\\'stage-player-stat\\'", htmLin) sDat <- htmLin[sLin] dJSON <- gsub("^.*DataStore.*\\[(.*)\\]);", "\\[\\1\\]", sDat) convertJSONDate = function(x) { if(grepl("/?(new )?Date\\(", x)) { val = gsub(".*Date\\(([0-9]+)\\).*", "\\1", x) as.Date(structure((as.numeric(val)/1000), class = c("POSIXct", "POSIXt"))) } else x } myList <- fromJSON(dJSON, nullValue=NA, stringFun=convertJSONDate) length(myList) myListVars <- as.vector(sapply(myList[1], names)); myListVars fullDF <- data.frame(t(sapply(myList, as.vector)), stringsAsFactors=FALSE) shortListVars <- c("TeamRegionCode","Name","PositionShort","Age","Height","Weight","GameStarted","Goals","Assists","Yellow","Red","TotalShots","TotalPasses", "AccuratePasses","AerialWon","ManOfTheMatch","Rating") head(fullDF[shortListVars]) ### <code> Éder Comunello <c <comunello.eder@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]

Caro Walmes, Boa noite. Eu tenho um solução com python. Segue o códigos e o scrip que fiz no ipython notebook. Depois vc poderia salvar em csv e rodar a estatística com R. Att. ##--------------------------------------##---------------------------####--------------------------------------##---------------------------####--------------------------------------##---------------------------## from ghost import Ghost from bs4 import BeautifulSoup as bs import regex import pandas page = ghost.open("http://www.whoscored.com/Teams/1232") soup = bs(ghost.content) table = soup.find('tbody', { "id" : "team-squad-stats-summary-content" }) players = table.findAll('tr') data_all = {} for player in players: cols = player.findAll('td') data = [col.get_text() for col in cols] data_all[data[2]] = data pandas.DataFrame(data_all).T 012345678910111213141516Biro Biro12Biro BiroAM(L)19164550(1)----160--6.47Bruno Vieira5Bruno VieiraD(R)28178692-----85.91.5-7.23Carlinhos2CarlinhosD(L)27176 722----181.1117.57Chiquinho17ChiquinhoAM(C)2417069----------Darío Conca6Darío ConcaM30167582--1-385.9--7.21Diego Cavalieri10Diego CavalieriGK31191862----- 46.2--6.69Diguinho8DiguinhoDM(C)31171702----0.584.71.5-7.14Edwin Valencia13Edwin ValenciaM29181850(2)-----81.81-6.31Elivelton9EliveltonD21179812-----74.60.5- 6.86Felipe16FelipeGK2619390----------Fred7FredFW3018575212--375.61.5-7.19Gum 3GumD(C)28189862----0.575.22.517.51Jean11JeanDM(C)27170702----188.6--6.61 Kenedy18KenedyFW1818277----------Rafael Sóbis1Rafael SóbisAM(LR),FW281726722 ---3.578.81.5-7.82Rafinha14RafinhaM(R)20177740(1)-----50--6Wagner4Wagner AM(C)29172712--1-390--7.43Walter15WalterFW24178880(1)-----60--5.95Wellington Carvalho19Wellington CarvalhoD2118584----------Wellington Silva20Wellington SilvaD2617764---------- ##--------------------------------------##---------------------------####--------------------------------------##---------------------------####--------------------------------------##---------------------------## 2014-04-30 15:32 GMT-03:00 walmes . <walmeszeviani@gmail.com>:
Saudações,
Preciso ler os dados de uma página mas da forma tradicional, usando XML para o exame e retenção dos dados eu não consigo. Os dados são de altura, idade, peso, enfim, de jogadores de futebol do campeonato brasileiro. Estão disponíveis nessa página, por exemplo, para o Fluminense
*http://www.whoscored.com/Teams/1232 <http://www.whoscored.com/Teams/1232>*
O que me interessa é a tabela com o nome dos jogadores, dados biométricos e esportivos. Um selecionar e copiar dessa porção que me interessa traz esse conteúdo.
R Name Pos Age cm kg Apps Goal A Yel Red SpG PS% AW MoM Rt 1 Rafael Sóbis AM(LR),FW 28 172 67 2 2 - - - 3.5 78.8 1.5 - 7.82 2 Carlinhos D(L) 27 176 72 2 - - - - 1 81.1 1 1 7.57 3 Gum D(C) 28 189 86 2 - - - - 0.5 75.2 2.5 1 7.51 4 Wagner AM(C) 29 172 71 2 - - 1 - 3 90 - - 7.43 5 Bruno Vieira D(R) 28 178 69 2 - - - - - 85.9 1.5 - 7.23 6 Darío Conca M 30 167 58 2 - - 1 - 3 85.9 - - 7.21 7 Fred FW 30 185 75 2 1 2 - - 3 75.6 1.5 - 7.19 8 Diguinho DM(C) 31 171 70 2 - - - - 0.5 84.7 1.5 - 7.14 9 Elivelton D 21 179 81 2 - - - - - 74.6 0.5 - 6.86 10 Diego Cavalieri GK 31 191 86 2 - - - - - 46.2 - - 6.69 11 Jean DM(C) 27 170 70 2 - - - - 1 88.6 - - 6.61 12 Biro Biro AM(L) 19 164 55 0(1) - - - - 1 60 - - 6.47 13 Edwin Valencia M 29 181 85 0(2) - - - - - 81.8 1 - 6.31 14 Rafinha M(R) 20 177 74 0(1) - - - - - 50 - - 6 15 Walter FW 24 178 88 0(1) - - - - - 60 - - 5.95 16 Felipe GK 26 193 90 - - - - - - - - - - 17 Chiquinho AM(C) 24 170 69 - - - - - - - - - - 18 Kenedy FW 18 182 77 - - - - - - - - - - 19 Wellington Carvalho D 21 185 84 - - - - - - - - - - 20 Wellington Silva D 26 177 64 - - - - - - - - - -
Quando eu peço o código fonte da página (acesso pelo botão direito do mouse no navegador firefox), não aparecem esses valores lá. Se aparecessem dava para usar o XML. Pelo jeito os dados são trazidos por uma consulta à uma base de dados on the fly para colocar na página. A única forma que eu sei de pegar é copiando para área de transferência.
Eu tenho feito assim: 1. Abro a página de cada time no navegador e dou ctrol+a para selecionar todo o conteúdo; 2. Dou ctrol+c para copiar o conteúdo para área de transferência; 3. Dou control+v dentro de um arquivo texto; 4. Leio o arquivo texto no R, elimino a sujeira, organizo em colunas até chegar um data.frame.
O que eu quero é substituir passos gráficos de 1 à 3 por algum comando do teminal linux que pudesse pegar a URL que eu passar e salvar o conteúdo em um aquivo que eu der o nome. Com isso elimino intervenção humana e rapidamente baixo todos os times, de todos os torneios para ter excelentes dados para trabalhar em aula. Se alguém se interessar, os dados da liga européia (56 times) que peguei no braço estão em
*http://www.leg.ufpr.br/~walmes/data/euro_football_players.txt <http://www.leg.ufpr.br/~walmes/data/euro_football_players.txt>*
Dei umas googladas e vi alguns comandos que, infelizmente, ainda não trazem o que eu preciso, como
*sudo apt-get install lynx* *lynx -dump http://www.whoscored.com/Teams/1232 <http://www.whoscored.com/Teams/1232>*
O recorte do resultado do comando está abaixo.
View: [41]Overall [42]Home [43]Away
R Name Pos Age cm kg Apps Goal A Yel Red SpG PS% AW MoM Rt <------ a tabela que eu queria era pra estar *Players shaded are players who are not currently active in team. <------ entre essas duas linhas, mas não. (Loaned, sold, etc..)
Tournaments: [44]Brasileirão
View: [45]Overall [46]Home [47]Away
Caso alguém tenha algum caminho a apontar, fico grato. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Alisson Lucrecio da Costa

Walmes, outra opção é dar uma olhada no xclip. Algo como xclip -out -selection clip > <arquivo.txt> vai colar o conteúdo do clipboard para o arquivo txt. Talvez de para eliminar algumas etapas com ele (nunca usei mais do que isso, mas sei que ele tem loops também). De uma olhada em http://linuxtidbits.wordpress.com/2008/02/22/command-line-to-clipboard/ --- Fernando de Pol Mayer Laboratório de Estatística Ambiental - LEA Instituto de Matemática, Estatística e Física - IMEF Universidade Federal do Rio Grande - FURG URL: http://fernandomayer.github.io e-mail: fernando.mayer [@] {gmail.com, furg.br} 2014-04-30 19:26 GMT-03:00 Alisson Lucrecio <alissonluc@gmail.com>:
Caro Walmes,
Boa noite.
Eu tenho um solução com python. Segue o códigos e o scrip que fiz no ipython notebook. Depois vc poderia salvar em csv e rodar a estatística com R.
Att.
##--------------------------------------##---------------------------####--------------------------------------##---------------------------####--------------------------------------##---------------------------##
from ghost import Ghost from bs4 import BeautifulSoup as bs import regex import pandas
page = ghost.open("http://www.whoscored.com/Teams/1232")
soup = bs(ghost.content)
table = soup.find('tbody', { "id" : "team-squad-stats-summary-content" })
players = table.findAll('tr')
data_all = {} for player in players: cols = player.findAll('td') data = [col.get_text() for col in cols] data_all[data[2]] = data
pandas.DataFrame(data_all).T
01 23 45 67 89 1011 1213 1415 16Biro Biro 12 Biro Biro AM(L)19 16455 0(1)-- - -1 60- -6.47 Bruno Vieira5 Bruno Vieira D(R)28 17869 2- -- -- 85.91.5 - 7.23 Carlinhos2 Carlinhos D(L)27 17672 2- -- -1 81.11 17.57 Chiquinho17 Chiquinho AM(C)24 17069 -- -- -- -- -- Darío Conca6 Darío Conca M30 167582 - -1 -3 85.9- -7.21 Diego Cavalieri10 Diego Cavalieri GK31 19186 2- -- --46.2 - -6.69 Diguinho8 Diguinho DM(C)31 17170 2- -- -0.5 84.71.5 -7.14 Edwin Valencia13 Edwin Valencia M29 18185 0(2)- -- -- 81.81 -6.31 Elivelton9 Elivelton D21 17981 2- -- -- 74.60.5 -6.86 Felipe16 Felipe GK26 19390 -- - - -- -- -- Fred7 Fred FW30 18575 21 2- -3 75.61.5 -7.19 Gum3 Gum D(C)28189 86 2- -- -0.5 75.22.5 17.51 Jean11 Jean DM(C)27 17070 2- -- -1 88.6- -6.61Kenedy 18 Kenedy FW18 18277 -- -- -- -- -- Rafael Sóbis1 Rafael Sóbis AM(LR),FW28172 67 22 -- -3.5 78.81.5 -7.82 Rafinha14 Rafinha M(R)20 17774 0(1)- -- -- 50-- 6 Wagner4 Wagner AM(C)29 17271 2- -1 -3 90- -7.43 Walter15 Walter FW24 178 88 0(1)- -- -- 60- -5.95 Wellington Carvalho19 Wellington Carvalho D21 185 84 -- -- -- -- -- Wellington Silva20 Wellington Silva D26 17764 -- -- -- - - --
##--------------------------------------##---------------------------####--------------------------------------##---------------------------####--------------------------------------##---------------------------##
2014-04-30 15:32 GMT-03:00 walmes . <walmeszeviani@gmail.com>:
Saudações,
Preciso ler os dados de uma página mas da forma tradicional, usando XML para o exame e retenção dos dados eu não consigo. Os dados são de altura, idade, peso, enfim, de jogadores de futebol do campeonato brasileiro. Estão disponíveis nessa página, por exemplo, para o Fluminense
*http://www.whoscored.com/Teams/1232 <http://www.whoscored.com/Teams/1232>*
O que me interessa é a tabela com o nome dos jogadores, dados biométricos e esportivos. Um selecionar e copiar dessa porção que me interessa traz esse conteúdo.
R Name Pos Age cm kg Apps Goal A Yel Red SpG PS% AW MoM Rt 1 Rafael Sóbis AM(LR),FW 28 172 67 2 2 - - - 3.5 78.8 1.5 - 7.82 2 Carlinhos D(L) 27 176 72 2 - - - - 1 81.1 1 1 7.57 3 Gum D(C) 28 189 86 2 - - - - 0.5 75.2 2.5 1 7.51 4 Wagner AM(C) 29 172 71 2 - - 1 - 3 90 - - 7.43 5 Bruno Vieira D(R) 28 178 69 2 - - - - - 85.9 1.5 - 7.23 6 Darío Conca M 30 167 58 2 - - 1 - 3 85.9 - - 7.21 7 Fred FW 30 185 75 2 1 2 - - 3 75.6 1.5 - 7.19 8 Diguinho DM(C) 31 171 70 2 - - - - 0.5 84.7 1.5 - 7.14 9 Elivelton D 21 179 81 2 - - - - - 74.6 0.5 - 6.86 10 Diego Cavalieri GK 31 191 86 2 - - - - - 46.2 - - 6.69 11 Jean DM(C) 27 170 70 2 - - - - 1 88.6 - - 6.61 12 Biro Biro AM(L) 19 164 55 0(1) - - - - 1 60 - - 6.47 13 Edwin Valencia M 29 181 85 0(2) - - - - - 81.8 1 - 6.31 14 Rafinha M(R) 20 177 74 0(1) - - - - - 50 - - 6 15 Walter FW 24 178 88 0(1) - - - - - 60 - - 5.95 16 Felipe GK 26 193 90 - - - - - - - - - - 17 Chiquinho AM(C) 24 170 69 - - - - - - - - - - 18 Kenedy FW 18 182 77 - - - - - - - - - - 19 Wellington Carvalho D 21 185 84 - - - - - - - - - - 20 Wellington Silva D 26 177 64 - - - - - - - - - -
Quando eu peço o código fonte da página (acesso pelo botão direito do mouse no navegador firefox), não aparecem esses valores lá. Se aparecessem dava para usar o XML. Pelo jeito os dados são trazidos por uma consulta à uma base de dados on the fly para colocar na página. A única forma que eu sei de pegar é copiando para área de transferência.
Eu tenho feito assim: 1. Abro a página de cada time no navegador e dou ctrol+a para selecionar todo o conteúdo; 2. Dou ctrol+c para copiar o conteúdo para área de transferência; 3. Dou control+v dentro de um arquivo texto; 4. Leio o arquivo texto no R, elimino a sujeira, organizo em colunas até chegar um data.frame.
O que eu quero é substituir passos gráficos de 1 à 3 por algum comando do teminal linux que pudesse pegar a URL que eu passar e salvar o conteúdo em um aquivo que eu der o nome. Com isso elimino intervenção humana e rapidamente baixo todos os times, de todos os torneios para ter excelentes dados para trabalhar em aula. Se alguém se interessar, os dados da liga européia (56 times) que peguei no braço estão em
*http://www.leg.ufpr.br/~walmes/data/euro_football_players.txt <http://www.leg.ufpr.br/~walmes/data/euro_football_players.txt>*
Dei umas googladas e vi alguns comandos que, infelizmente, ainda não trazem o que eu preciso, como
*sudo apt-get install lynx* *lynx -dump http://www.whoscored.com/Teams/1232 <http://www.whoscored.com/Teams/1232>*
O recorte do resultado do comando está abaixo.
View: [41]Overall [42]Home [43]Away
R Name Pos Age cm kg Apps Goal A Yel Red SpG PS% AW MoM Rt <------ a tabela que eu queria era pra estar *Players shaded are players who are not currently active in team. <------ entre essas duas linhas, mas não. (Loaned, sold, etc..)
Tournaments: [44]Brasileirão
View: [45]Overall [46]Home [47]Away
Caso alguém tenha algum caminho a apontar, fico grato. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Alisson Lucrecio da Costa
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Walmes, nao entendi pq vc nao conseguiu. Veja o que consegui com o inspect element do google chrome <tr class=""><td class="o">7</td><td class="rgn"><span class="ui-icon country flg-br"></span></td><td class="pn"><a class="player-link " title="" href="/Players/15418">Fred</a></td><td class="pos" title="Forward">FW</td><td class="age">30</td><td class="hg">185</td><td class="wg">75</td><td class="ap" title="Total Appearances: 2">2</td><td class="goals" title="">1</td><td class="assists" title="">2</td><td class="yellow" title="">-</td><td class="red" title="">-</td><td class="totalshots" title="Total Shots: 6">3</td><td class="passsuccess" title="Accurate/Total Passes: 34/45">75.6</td><td class="aerialwon" title="Won/Total Aerials: 3/10">1.5</td><td class="manofthematch" title="">-</td><td class="rating sorted" title="">7.19</td></tr> Em 30 de abril de 2014 19:31, Fernando Mayer <fernandomayer@gmail.com>escreveu:
Walmes,
outra opção é dar uma olhada no xclip. Algo como
xclip -out -selection clip > <arquivo.txt>
vai colar o conteúdo do clipboard para o arquivo txt. Talvez de para eliminar algumas etapas com ele (nunca usei mais do que isso, mas sei que ele tem loops também). De uma olhada em http://linuxtidbits.wordpress.com/2008/02/22/command-line-to-clipboard/
--- Fernando de Pol Mayer Laboratório de Estatística Ambiental - LEA Instituto de Matemática, Estatística e Física - IMEF Universidade Federal do Rio Grande - FURG URL: http://fernandomayer.github.io e-mail: fernando.mayer [@] {gmail.com, furg.br}
2014-04-30 19:26 GMT-03:00 Alisson Lucrecio <alissonluc@gmail.com>:
Caro Walmes,
Boa noite.
Eu tenho um solução com python. Segue o códigos e o scrip que fiz no ipython notebook. Depois vc poderia salvar em csv e rodar a estatística com R.
Att.
##--------------------------------------##---------------------------####--------------------------------------##---------------------------####--------------------------------------##---------------------------##
from ghost import Ghost from bs4 import BeautifulSoup as bs import regex import pandas
page = ghost.open("http://www.whoscored.com/Teams/1232")
soup = bs(ghost.content)
table = soup.find('tbody', { "id" : "team-squad-stats-summary-content" })
players = table.findAll('tr')
data_all = {} for player in players: cols = player.findAll('td') data = [col.get_text() for col in cols] data_all[data[2]] = data
pandas.DataFrame(data_all).T
01 23 45 67 89 1011 1213 1415 16Biro Biro 12 Biro Biro AM(L)19 16455 0(1) - -- -1 60- -6.47 Bruno Vieira5 Bruno Vieira D(R)28 17869 2- -- -- 85.9 1.5 -7.23 Carlinhos2 Carlinhos D(L)27 17672 2- -- -1 81.11 17.57Chiquinho 17 Chiquinho AM(C)24 17069 -- -- -- -- -- Darío Conca6 Darío Conca M30167 58 2- -1 -3 85.9- -7.21 Diego Cavalieri10 Diego Cavalieri GK31 19186 2- - - -- 46.2- -6.69 Diguinho8 Diguinho DM(C)31 17170 2- -- -0.5 84.71.5 - 7.14 Edwin Valencia13 Edwin Valencia M29 18185 0(2)- -- -- 81.81 -6.31Elivelton 9 Elivelton D21 17981 2- -- -- 74.60.5 -6.86 Felipe16 Felipe GK26 19390 - - -- -- -- -- Fred7 Fred FW30 18575 21 2- -3 75.61.5 -7.19 Gum3 Gum D(C) 28 18986 2- -- -0.5 75.22.5 17.51 Jean11 Jean DM(C)27 17070 2- -- -1 88.6 - -6.61 Kenedy18 Kenedy FW18 18277 -- -- -- -- -- Rafael Sóbis1 Rafael Sóbis AM(LR),FW28 17267 22 -- -3.5 78.81.5 -7.82 Rafinha14 Rafinha M(R)20177 74 0(1)- -- -- 50- -6 Wagner4 Wagner AM(C)29 17271 2- -1 -3 90- -7.43Walter 15 Walter FW24 17888 0(1)- -- -- 60- -5.95 Wellington Carvalho19 Wellington Carvalho D21 18584 -- -- -- -- -- Wellington Silva20 Wellington Silva D26177 64 -- -- -- -- --
##--------------------------------------##---------------------------####--------------------------------------##---------------------------####--------------------------------------##---------------------------##
2014-04-30 15:32 GMT-03:00 walmes . <walmeszeviani@gmail.com>:
Saudações,
Preciso ler os dados de uma página mas da forma tradicional, usando XML para o exame e retenção dos dados eu não consigo. Os dados são de altura, idade, peso, enfim, de jogadores de futebol do campeonato brasileiro. Estão disponíveis nessa página, por exemplo, para o Fluminense
*http://www.whoscored.com/Teams/1232 <http://www.whoscored.com/Teams/1232>*
O que me interessa é a tabela com o nome dos jogadores, dados biométricos e esportivos. Um selecionar e copiar dessa porção que me interessa traz esse conteúdo.
R Name Pos Age cm kg Apps Goal A Yel Red SpG PS% AW MoM Rt 1 Rafael Sóbis AM(LR),FW 28 172 67 2 2 - - - 3.5 78.8 1.5 - 7.82 2 Carlinhos D(L) 27 176 72 2 - - - - 1 81.1 1 1 7.57 3 Gum D(C) 28 189 86 2 - - - - 0.5 75.2 2.5 1 7.51 4 Wagner AM(C) 29 172 71 2 - - 1 - 3 90 - - 7.43 5 Bruno Vieira D(R) 28 178 69 2 - - - - - 85.9 1.5 - 7.23 6 Darío Conca M 30 167 58 2 - - 1 - 3 85.9 - - 7.21 7 Fred FW 30 185 75 2 1 2 - - 3 75.6 1.5 - 7.19 8 Diguinho DM(C) 31 171 70 2 - - - - 0.5 84.7 1.5 - 7.14 9 Elivelton D 21 179 81 2 - - - - - 74.6 0.5 - 6.86 10 Diego Cavalieri GK 31 191 86 2 - - - - - 46.2 - - 6.69 11 Jean DM(C) 27 170 70 2 - - - - 1 88.6 - - 6.61 12 Biro Biro AM(L) 19 164 55 0(1) - - - - 1 60 - - 6.47 13 Edwin Valencia M 29 181 85 0(2) - - - - - 81.8 1 - 6.31 14 Rafinha M(R) 20 177 74 0(1) - - - - - 50 - - 6 15 Walter FW 24 178 88 0(1) - - - - - 60 - - 5.95 16 Felipe GK 26 193 90 - - - - - - - - - - 17 Chiquinho AM(C) 24 170 69 - - - - - - - - - - 18 Kenedy FW 18 182 77 - - - - - - - - - - 19 Wellington Carvalho D 21 185 84 - - - - - - - - - - 20 Wellington Silva D 26 177 64 - - - - - - - - - -
Quando eu peço o código fonte da página (acesso pelo botão direito do mouse no navegador firefox), não aparecem esses valores lá. Se aparecessem dava para usar o XML. Pelo jeito os dados são trazidos por uma consulta à uma base de dados on the fly para colocar na página. A única forma que eu sei de pegar é copiando para área de transferência.
Eu tenho feito assim: 1. Abro a página de cada time no navegador e dou ctrol+a para selecionar todo o conteúdo; 2. Dou ctrol+c para copiar o conteúdo para área de transferência; 3. Dou control+v dentro de um arquivo texto; 4. Leio o arquivo texto no R, elimino a sujeira, organizo em colunas até chegar um data.frame.
O que eu quero é substituir passos gráficos de 1 à 3 por algum comando do teminal linux que pudesse pegar a URL que eu passar e salvar o conteúdo em um aquivo que eu der o nome. Com isso elimino intervenção humana e rapidamente baixo todos os times, de todos os torneios para ter excelentes dados para trabalhar em aula. Se alguém se interessar, os dados da liga européia (56 times) que peguei no braço estão em
*http://www.leg.ufpr.br/~walmes/data/euro_football_players.txt <http://www.leg.ufpr.br/~walmes/data/euro_football_players.txt>*
Dei umas googladas e vi alguns comandos que, infelizmente, ainda não trazem o que eu preciso, como
*sudo apt-get install lynx* *lynx -dump http://www.whoscored.com/Teams/1232 <http://www.whoscored.com/Teams/1232>*
O recorte do resultado do comando está abaixo.
View: [41]Overall [42]Home [43]Away
R Name Pos Age cm kg Apps Goal A Yel Red SpG PS% AW MoM Rt <------ a tabela que eu queria era pra estar *Players shaded are players who are not currently active in team. <------ entre essas duas linhas, mas não. (Loaned, sold, etc..)
Tournaments: [44]Brasileirão
View: [45]Overall [46]Home [47]Away
Caso alguém tenha algum caminho a apontar, fico grato. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218
==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Alisson Lucrecio da Costa
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
participantes (6)
-
Alisson Lucrecio
-
Fernando Mayer
-
Leandro Marino
-
Marcus Nunes
-
walmes .
-
Éder Comunello