fala incomparável seja muito bem-vindo a mais um vídeo no canal eu sou L carpinski MVP Microsoft e especialista em análise de dados só que hoje hoje o vídeo não é comigo hoje temos um convidado super especial aqui no quadro incomparáveis no canal do mestre e ao grande Paulo saia Paulo sawaia vai trazer um conteúdo super avançado sobre linguagem Python como fazer web scrapping ou seja ir dentro de um site buscar as informações e jogar para um banco de dados para uma planilha enfim através da linguagem Python conteúdo ó de altíssimo valor e avançado hein avançado
para você que quer descobrir novas ferramentas tecnologias que vão além do Power bi então se você quer aprender mais sobre Python então faz o seguinte ó se inscreve aqui no canal ativa o Sininho compartilha com a galera porque nós teremos cada vez mais conteúdo sobre outras ferramentas aqui no canal já peço aqui para você também comentar aqui embaixo ó se você quer realmente que o Paulo salia traga com mais frequência conteúdos avançados de linguagem Python assim como também linguagem M diz aqui embaixo Qual dos Tópicos você gostaria de ver né aqui dentro do nosso canal
da xperio Beleza então agora fique com o grande Paulo saa e um conteúdo de altíssimo nível quebra tudo meu amigo vai lá e aí galera tudo bem dessa vez a gente não vai falar de power query ou linguagem M nosso desafio vai ser um pouco diferente a gente vai pegar essa página aqui de atletas de jiujitsu da ibjjf e a gente vai trazer todos eles para um arquivo para que depois a gente consiga analisar isso dentro do Power bi Então vamos dar uma navegada aqui e explorar os dados que a gente vai pegar essa daqui
é a página da onde a gente vai pegar aqui os nossos atletas a gente tem aqui o número do ranking a foto o nome a academia e a pontuação tanto para o os atletas de kimono deito de faixa preta adulto masculino quanto pro feminino mas a gente tem também aqui alguns filtros a gente vai começar pelo a gente vai começar aqui pelo masculino Sef ranking quando a gente clica aqui a gente tem uma url onde a gente tem aqui alguns filtros as divisão a a faixa o gênero e o que mais que a gente consegue
ver aqui se ele tá de kimono não o peso dele e tudo mais então o nosso desafio é pegar essa página inicialmente a gente vai pegar uma só e depois a gente vai deixando o negócio mais legal a gente vai pegar essa primeira página depois a gente vai paginar e pegar todos os 13339 atletas depois a gente vai eh mudando aqui os nossos parâmetros a gente vai pegar todo mundo com kimono todo mundo sem kimono todo mundo do adulto do master todo mundo que for masculino feminino de todas as faixas e também em todos os
pesos Então vamos lá ver como que a gente vai fazer isso a gente vai usar uma ferramenta chamada Google cab e ela vai rodar aqui dentro do Google Drive e ela é basicamente um Executor de Python online gratuito então cliquei com o botão direito aqui cliquei em mais cliquei em Google collaboratory e ele abriu aqui pra gente um um notebook né o notebook é o o arquivo a partir do qual a gente vai começar a escrever o nosso código Eu Vou Chamar esse arquivo aqui de web scrapping bjj que é Brasilian digitsu Ok E aí
a gente vai começar então a trazer as nossas bibliotecas acho que aqui esse zoom aqui tá num tamanho legal a gente vai começar aqui a trazer as as bibliotecas que a gente vai usar para para fazer isso aqui então a gente vai trazer o Import fazer o Import do requests aí lá da biblioteca BS4 a gente vai fazer o Import do beautiful sup beautiful sup é a biblioteca né que a gente vai usar para poder fazer a raspagem desses dados a gente vai importar pandas também e eu vou chamar ela de pd para ficar mais
fácil da gente referenciar Ela pandas vai ser o que a gente vai usar para poder tratar os nossos dados depois segunda parte a gente vai usar essa biblioteca chamada it e Tools e a gente vai pegar somente o a biblioteca product pra gente poder fazer a combinação de todas essas categorias aqui né de todos esses filtros e e por fim mas não muito necessário eu vou vou trazer também essa biblioteca do Google collab eu vou importar o files para se a gente quiser a gente consegue fazer o download da nossa biblioteca depois bom vou separar
aqui num outro pedaço de código Porque daí a gente pode ir executando eles aos poucos né esse que é o legal da gente trabalhar com o notebook a gente consegue executando o os códigos aos poucos percebam que a hora que eu cliquei aqui em Play ah o Google começou a alocar um espaço né uma máquina aqui pra gente é esse aqui tá errado né então Import agora vai e o Google tá escrito errado também aí e agora vai legal bom vamos começar aqui então declarando o nosso domínio eu vou partindo das boas práticas de de
desenvolvimento eu vou declarar boa parte das coisas aqui em inglês tá então vou colocar aqui o nosso domínio que é https 2 bar bar ibjjf.com aí eu vou deixar a a minha URL vai ser a gente vai usar o my F string onde a gente vai trazer aqui o domain E aí a gente vai colocar o restante da nossa deixa eu voltar aqui o restante da nossa string que é barra 2024 atletes ranking Então vamos terminar aqui escrever o nosso código legal deixa eu dar um print aqui nessa url pra gente ver se ela tá
se ela tá coerente ela vai dar erro porque primeiro preciso declarar elas aqui em cima né Maravilha é o mesmo mesmo mesmo link bom é uma boa prática também a gente sempre declarar um cabeçalho que é esse daqui chamado user user Agent para que a gente consiga falar pro pro servidor onde tá esse site aqui que na verdade a gente não tá usando uma ferramenta de web scrapping para fazer a raspagem do do site né na verdade a gente tá usando é um um navegador que vai ser esse Mozilla 5.0 né então o o servidor
em vez Dee achar que é um Google collab fazendo o scrapping da página ele vai achar que é o navegador osila E aí já a gente já vai deixar tudo preparado pra gente colocar todos esses rankings aqui então vejam que a gente tem a nossa URL a gente tem aqui como se fosse o nosso end end Point e aqui a gente tem depois do nosso ponto de interrogação a gente tem todos os parâmetros que a gente vai passar na nossa URL e esses parâmetros parameters eles vão ser passados no formato de um dicionário o primeiro
deles aqui deixa eu aplicar um filtro aqui G adulto masculino faixa preta o primeiro deles por alguma razão é esse utf8 aqui então eu vou colocar todos os parâmetros aqui o tf8 entre aspas né Eu sempre gosto de usar aspas simples também para facilitar caso eu precise passar uma string com aspas duplas e eu vou passar o restante da dos meus parâmetros aqui também né Não vou escrever todos não porque escrever os parâmetros Não não é o grande segredo aqui então aqui a gente tem o nosso filtro o filtro S que é o se ele
tem ou não kimono o rank o a categoria o gênero a faixa e o peso como ele não existe aqui eu coloquei ele como vazio e o número da página que aqui ele também não tá aparecendo Mas se a gente vai pra segunda página ó ele traz pra gente aqui a a página dois Legal vamos começar por aqui então e aí a gente vai fazer o seguinte e eu vou declarar uma deixa eu declarar essas variáveis né eu vou declarar aqui uma variável chamada response e aí a gente vai fazer o quê response A gente
vai chamar aquela biblioteca requests e a gente vai fazer uma get onde a gente vai passar nossa URL request a gente vai passar nosso URL o segundo parâmetro são os cabeçalhos então aqui a gente vai passar os cabeçalhos aqui e o terceiro parâmetro são os parâmetros da da da consulta que a gente vai passar os nossos parâmetros parameters Maravilha e eu vou tentar imprimir isso aqui response vamos ver o que que ele vai trazer pra gente ele trouxe que a resposta é 200 Mas o que eu quero é o texto né Eu quero que ele
retorne o o corpo da da requisição então ele trouxe aqui pra gente um HTML bem grandão com tudo que a gente precisa né Vamos tentar encontrar aqui por exemplo o Deixa eu voltar aqui na página um vou tentar procurar aqui o Felipe Andrew Leandro da Silva ó ele tá aqui Felipe Andrew Leandro da Silva a pontuação a academia e várias coisas a partir daqui que a gente vai começar a puxar os nossos dados então no fim eu quero só o texto né então eu vou pegar esse ponto Text e jogar aqui pro fim o resultado
pra gente vai ser o mesmo legal bom Agora eu preciso interpretar esse texto como se fosse um HTML Então a gente vai criar uma outra variável aqui por padrão ela ser chamada de sop né sup e a gente vai chamar aqui então o Beautiful Beautiful sup e eu vou passar aqui dentro o texto que a gente quer né string que a gente quer interpretar e eu vou falar que ele vai ter que interpretar como HTML então HTML parcer e aí eu vou pedir para ele imprimir pra gente a sopa e ele imprimiu exatamente a mesma
coisa só que agora ele tá interpretando isso daqui como se fosse um HTML tá como a gente vai usar isso várias vezes eu vou transformar isso daqui numa numa função Então em vez de imprimir a sopa eu preciso mandar retornar a sopa vou identar aqui pra direita uma vez Dá um enter aqui e a gente vai colocar o nome da nossa função de get page content que é pegar o conteúdo da página e a gente vai passar três parâmetros para cá que a nossa ur L os nossos cabeçalhos e os nossos parâmetros paramet Então esse
parâmetro ele vai vir para cá esse parâmetro vai vir para cá e esse parâmetro vai vir para cá legal temos agora uma função deixa eu declarar ela aqui ah Faltou dois pontos aqui no fim temos aqui então uma função e eu vou tentar executar ela então get página colocar aqui page Opa page é igual get page content e eu vou passar aqui então a minha URL os meus cabeçalhos e os meus parameters eu deixei o nome dos parâmetros e o nome das variáveis com tamanhos de fonte diferente né um tudo em maiúscula e outro tudo
minúsculas justamente pra gente poder diferenciar um do outro aqui tá ele retornou bonitinho agora vamos fazer o print dessa página e ele imprimiu aqui pra gente então a gente consegue agora em vez de ficar tendo que escrever esse código o tempo todo a gente consegue ah a gente consegue só chamar essa função Ok legal o que que a gente tem que fazer aqui agora eu vou clicar com o botão direito aqui na minha página e vou clicar em inspecionar quando eu clico em inspecionar ele abre essa essa janelinha aqui pra gente aí eu vou clicar
nesse botãozinho para eu ir interagindo com a página deixa eu dar um tirar um zoom aqui um pouquinho aqui aqui beleza aqui eu consigo dar zoom consigo também então ficou show bom eu vou pôr o mouse então em cima do Felipe Andrew e ele abriu aqui para mim o Felipe Andrew eu vou tentar encontrar Qual que é o o o o objeto máximo aqui né quando eu cliquei nele ele acendeu aqui ele abriu para mim essa tabela então tudo que eu vou fazer agora precisa ser dentro dentro dessa tabela aqui então eu preciso primeiro encontrar
ela e a partir que a gente a partir do momento que a gente encontrar ela a gente consegue pegar as linhas né esse TR aqui é o table Row para cada uma das Linhas a gente consegue pegar a posição a gente consegue pegar a foto a gente consegue pegar o nome a gente consegue pegar a academia a gente consegue pegar a pontuação e tudo mais que a gente precisar Inclusive a URL aqui pra gente poder Navegar para alguma coisa mais detalhada de cada um dos atletas Então vamos tentar encontrar isso daqui eu vou tentar então
trazer a minha tabela onde eu vou pegar a sopa que eu retornei aqui em cima deixa eu retornar ela de novo nép a minha sopa vai ser o get page content com a minha URL os meus cabeçalhos e os meus parâmetros parameters deixa eu colocar uns espacinhos aqui para ficar mais bonito e aí eu vou ter que pegar essa essa sopa e tentar encontrar essa tag aqui chamada tabela Cadê ela aqui eu ten que tentar encontrar essa tag chamada tabela então vou procurar essa tag chamada tabela não né na verdade ela chama table tabela tô
traduzindo automaticamente aqui né mas ela chama table Então a gente vai ter que tentar encontrar ela então vou dar um play primeiro ele pegou a página e tentou encontrar a tabela vamos ver o que que ele trouxe na tabela Vamos dar um print na table e ele trouxe pra gente Exatamente isso aqui ó me trouxe aqui a tabela tb o primeiro TR com essas posição número um e o Felipe Angel então tabela TR e trouxe aqui pra gente a posição e tudo mais que a gente precisa legal agora para cada item desses aqui a gente
precisa agora a gente precisa na verdade iterar nessa tabela né passar linha por linha dessa tabela e pegar os itens que interessam pra gente pra gente fazer isso a gente vai usar uma uma uma técnica onde de novo vou deixar esse código aqui né não vou deixar ele separado aqui para que a gente não precise toda vez que enquanto a gente tiver fazendo testes ficar chamando essa página né ela tá guardada bonitinha agora eu consigo aqui dentro desse bloco começar a iterar e fazer o que eu quiser sem que eu tenha que ficar toda hora
chamando lá o meu chamando a minha página tendo que fazer requisição no site lá então vamos lá e primeiro eu vou declarar uma variável chamada atletas né atletes e eu vou falar que ela é uma lista vazia e aí depois a gente a gente vai iterando na tabela e a gente vai enchendo essa lista com todos os atletas que a gente for encontrando então assim agora que a gente achou a nossa tabela a gente precisa achar as nossas linhas né então eu vou procurar aqui dentro das minhas linhas ou melhor as minhas linhas eu vou
ter que procurar lá dentro da minha tabela e eu vou procurar todas né find All todas as tags chamadas TR todas essas aqui chamadas TR ó Então a gente tem essa a gente tem essa a gente tem essa a gente tem essa então eu quero achar todas então find All tudo que tiver o TR e de novo Vamos fazer um print disso aqui e ver o que que ele traz enfim Ele trouxe para quase que a mesma coisa né mas veja que agora ó ele trouxe uma lista começou aqui com um colchete e ele trouxe
aqui o nosso primeiro item separou aqui trouxe o segundo item separou aqui e assim por diante né então Então ele me trouxe todas as linhas linha eh separados como se fossem itens de uma lista e agora a gente consegue iterar nessa lista Então a gente vai fazer o seguinte também pra gente não ter que ficar procurando ela o tempo todo vou deixar assim depois eu junto tudo para cada para cada linha dentro de linhas né isso daqui é um termo que a gente usa para poder fazer uma iteração a gente vai tentar inicialmente procurar a
célula de fotos então a gente precisa trazer primeiro essa célula aqui ó das fotos e aí a gente vai pegar fazer lá na nessa linha Então a gente vai procurar Vamos abrir aqui a gente vai procurar essa essa tag TD onde a classe chama foto reduced e tentar trazer esse esse link aqui que esse é o link da foto então vamos lá a gente vai tentar então procurar a tag TD agora a gente vai colocar um segundo parâmetro chamado Class Opa a gente vai procurar pela Class que seja igual a f reduced Ok por que
que eu tenho esse underline aqui no fim porque a palavra Class é uma palavra reservada do Python tá quando a gente tá trabalhando com programação orientada a objetos então por isso que a gente precisa colocar esse underline aqui só pra gente poder eh diferenciar E no fim o nome do parâmetro é classic com underline tá legal vamos imprimir essa fotocell aqui então para cada item dessa lista né que são as nossas linhas da tabela eu tô tentando encontrar essa foto reduced e imprimir ela e olha que legal ela trouxe aqui pra gente a somente o
item que a gente tá procurando mas aí disso aqui tudo eu quero somente essa imagem aqui tá então vamos fazer o seguinte eu vou separar ele em uma outra uma outra variável chamada foto e lá na fotocell eu vou tentar procurar essa tag chamada image IMG e dessa image ele vai me trazer uma lista de tudo que que tem lá dentro Eu quero trazer somente o uma lista não né ele vai me trazer um um dicionário eu quero trazer somente o Source E aí eu vou mandar imprimir o essa foto a gente deu um erro
aqui Ah faltou o dedo find né então agora ele me trouxe somente a a URL das fotos né agora a gente vai ter que fazer isso para todos os outros itens Então a gente vai lá no nome eu vou trazer aqui o name Cell porque Vocês já vão entender por e a gente vai tentar encontrar Vamos lá a gente vai tentar encontrar o nome do Felipe aqui o nome do Felipe cadê ele tá aqui né Essa daqui é o o name Academy que é a tag principal e aqui dentro ele tem uma outra tag chamada
a onde a gente tem aqui o Felipe Andrew e a gente tem uma outra uma classe aqui chamada Academy onde tá trazendo academia então a gente precisa tentar separar essa esse name Academy em duas separadas então por isso que a gente vai tentar trazer o trazer a célula e a gente vai quebrando ele aos poucos tá então a gente vai tentar também procurar aqui uma tag chamada TD onde a gente vai pegar a CL chamada name Academy eu vou mandar imprimir ela Ele trouxe pra gente aqui o nome e a academia vamos procurar então agora
a gente vai procurar o nome dela o o campo chamado nome a gente vai pegar então o nosso name name Cell e dentro do name Cell a gente vai tentar encontrar dentro do name Cell a gente vai tentar encontrar essa div né isso daqui é uma tag chamado div onde a Class é igual a name Então vamos tentar encontrar ela aqui find div onde CL é igual a name eu vou tentar imprimir isso aqui vamos ver o que que ele vai trazer pra gente ele trouxe aqui o nome e trouxe aqui pra gente o Felipe
Andrew aqui a gente tem um desafio um pouco maior Alé de trazer o Andrew eu quero trazer o RL também para poder Navegar em cima informações mais detalhadas dele no futuro Então olha só eu vou tentar Trazer isso daqui num lugar separado eu vou tentar primeiro trazer essa tzin que tá aqui dentro Ó você vê que o tanto o nome do Felipe Andrew quanto a URL tá dentro dessa tag chamada a então eu vou procurar aqui chamado vou procurar o find a agora Ele trouxe aqui pra gente legal o nome vou mudar o nome dessa
variável aqui chamada de tag que a gente tá trazendo essa tag inteira e depois a gente vai quebrar né onde a gente vai trazer o nome e a URL o nome no fim então ele vai ser essa name tag E daqui a gente tem que tentar pegar o texto né a gente tem que tentar pegar o valor daqui de dentro Então a gente vai usar essa a função get Text e aí é um parâmetro opcional mas eu vou colocar ele aqui que é o strip igual a true para que que ele serve se por acaso
tem uns espaços antes ou depois do nome da do do texto que a gente tá querendo trazer ele já limpa automaticamente então agora Ele trouxe o nome pra gente né pegou o name tag e trouxe o nome agora eu quero tentar trazer os detalhes details a gente vai pegar também o name name tag desse nam tag a gente vai tentar trazer a o href href e trouxe aqui pra gente porém tá faltando um pedacinho da nossa URL aqui né que é o começo dela a gente pode simplesmente colocar aqui o nosso domínio e concatenar com
o HF e ele traz aqui bonitinho pra gente então a gente já tem o nosso nome a gente já tem os detalhes a gente já tem a foto vamos trazer aqui agora a nossa pontuação Então vou trazer aqui a nossa célula de pontuação points Cell a gente já sabe que a gente vai usar o Rose find a gente já sabe também que é um TD a gente só não sabe qual que é a classe A então a gente vai dar uma olhada na no HTML a classe que a gente vai trazer da pontuação é ess
aqui chamada pation então preciso procurar pela CL chamada pation daqui PR frente exatamente a mesma coisa né points vai ser a gente vai pegar o points Cell e vai trazer os dados dele get text strip igual a true Point Cell Point Cell e vamos imprimir ele aqui para ver o que que ele vai trazer pra gente trouxe aqui as pontua a pontuação pra gente tá faltando agora na verdade só o ranking né vamos ver aqui onde é que tá o ranking o ranking tá dentro da posição Então vamos fazer a mesma coisa Onde a gente
vai trazer aqui o rank e aqui a gente vai trazer a position position isso aí então aqui a gente colocar o ranking é igual mesma coisa que tem aqui em cima só que aí a gente vai usar o rank Pronto peguei aqui do ao 10 e ele trouxe bonitinho pra gente bom legal agora a gente prec transforma coisa para jogar aqui dentro de atletes né então a gente precisa criar o nosso atleta a gente já conseguiu pegar todos os dados dele aqui que falta pra gente é criar o nosso atleta então eu vou criar aqui
uma variável chamada atleta e eu vou criar um objeto aqui né um dicionário onde a foto vai ser a variável foto deixa eu descer bastante aqui a a gente vai ter o nome nome vai ser o nome details vai ser o details o os pontos serão os pontos e o ranking será o ranking Vamos colocar tudo entre aspas aqui né como sendo o nome do campo e esse nome do campo vai levar o nome da variável e agora eu vou mandar imprimir esses esse atleta aqui vamos ver que ele vai trazer pra gente print atleta
ó trouxe aqui ó a foto o nome os detalhes a pontuação e trouxe tudo que a gente precisa aqui para poder começar a montar o nosso a nossa base agora o que que a gente precisa fazer é jogar isso daqui para dentro desse atletas então ele vai olhar a linha vai pegar esses campos gerar esse objeto aqui e vai lá dentro da atletes e vai fazer uma pend dentro daquela daquela lista Então a gente vai pegar esse item chamado atleta e a gente vai fazer inserção dele dentro da nossa atletas tá legal então vamos dar
um play aqui eu vou mandar imprimir o ait agora ele trouxe pra gente aqui Um item com todos os nossos atletas dessa primeira página maravilha agora a gente precisa pegar da segunda da terceira da quarta e assim por diante então se eu coloco aqui segunda página Vamos esse aqui eu não preciso né vou até deixar ele lá para cima porque daí a gente não precisa ficar se confundindo e executando ele aqui o tempo todo a gente não mudou né então aqui a gente tem a nossa sopa que tá pegando agora da segunda página procurando a
tabela declarando aqui o atletas vazio procurando todas as linhas da da tabela Opa print ait e agora ele imprimiu onde o primeiro carinha aqui é o Gustavo Espindola vamos ver aqui Quem que é o primeiro cara da segunda aqui ó é Gustavo Espíndola mesmo legal el tá funcionando o que a gente precisa fazer agora é iterar né a gente precisa iterar nas páginas Até que a gente chegue até até a gente chegar no fim até a gente chegar no no no último atleta e ele parar sozinho Vamos fazer um teste aqui e vamos ver o
que acontece quando a gente chega no último atleta colocar aqui 130 páginas ainda falta um pouquinho 131 páginas 133 páginas Ah vai até a 134 ele vai trazer menos atletas né se eu trouxe do 1331 até a 1339 que que acontece quando a gente for pra última página ele não traz nada traz uma não Traz a tabela então a gente precisa começar a explorar aqui para ver o que que acontece como que a gente pode identificar que a a página acabou aqui pelo nosso pelo pelo nosso código vamos fazer o seguinte isso daqui também a
gente vai ter que fazer para cada uma das páginas então ao invés da gente fazer o print dos atletas eu vou mandar fazer o return dessa variável atletas aqui né que é isso que eu quero que ele traga e eu vou transformar isso tudo em uma função vou jogar isso aqui dentro vou jogar isso daqui aqui dentro deixa eu apagar essas coisas aqui para não fazer sujeira bom a sopa A gente já traz dessa URL então ela não precisa fazer parte da nossa função o que precisa fazer a partir da table né então vou e
dentar uma linha e dentar um pouco pra direita e vou criar aqui uma função chamada pars né vai ser interpretar os atletas par ATL e a única coisa que eu preciso passar aqui dentro é a sopa que vai ser jogada aqui dentro e daqui PR frente você já sab como funciona vamos executar E aí também como isso daqui a gente não vai ficar mudando tant eu dear junto com essa outra função aqui só pra gente dear o código já um Pou mais organizado tá vamos executar ele aqui para ficar declarado bonitinho temos aqui o nosso
domínio temos aqui a nossa página né Vou colocar aqui a página começar a colocar aqui declarando a página igual a 1 E aí deixa eu voltar aqui né esse aqui é página igual um a primeira coisa que a gente tem que fazer aqui no nosso caso é declarar ou melhor atualizar o valor desse parâmetro aqui né como isso daqui é um dicionário eu posso pegar esse campo do dicionário par parameters page e falar que ele é igual a página que eu criei que eu que eu declarei aqui em cima então vou fazer o seguinte ó
vou fazer um print do nossos parameters só pra gente ver se funciona param página temos aqui a página um se eu mudo aqui pra página do e mudou aqui pra página do se eu mudo aqui pra página 130 ele muda aqui pra página 130 por que que eu tô me preocupando com isso porque esse parâmetro aqui vai ser passado dentro da nossa URL né Legal vamos apagar isso aqui agora eu vou pegar nossa sopa vou chamar aqui uma sop sopa de atletas su ATL e eu vou trazer aqui então a nossa função get page content
vou passar nossa URL vou passar aqui os cabeçalhos e vou passar aqui os parâmetros depois eu vou pegar aqui os nossos atletas atletas e eu vou chamar aqui a nossa nossa função chamada e eu vou passar cá para dentro a sopa n essa sopa aqui tudo que a gente já fez lá em cima legal E aí eu vou tentar fazer o print dos ATL e vamos ver que que ele traz pra gente página 130 Ele trouxe o Cláudio Augusto Macedo Silva vamos jogar lá na página 130 Cláudio Augusto Macedo da Silva a segunda pessoa aqui
a segunda pessoa é o Mateus Gomes Mateus Gomes e assim por diante legal funcionou para uma página agora o que a gente precisa é jogar isso daqui dentro de várias páginas Então olha só a gente precisa fazer uma iteração vamos imaginar que eu vou pegar só as três primeiras páginas como título de exemplo para depois a gente começar a fazer isso daqui um pouquinho mais mais dinâmico vou falar aqui que a gente tem a primeira página então vou falar o seguinte ó enquanto a página for menor igual a 3 Opa menor ou igual a 3
ele vai fazer isso aqui quanto a página for menor ou igual a 3 ele vai fazer isso aqui eu vou mandar fazer o print dos atletas Então a gente tem a página um Ele me trouxe aqui três páginas hum calma aí Temos alguma coisa errada aqui enquanto a página Ah claro né a gente a gente pegou aqui a página um passou os atletas pegou a sopa de atletas pegou os nossos atletas e aqui a página é um a ele vai voltar no nosso loop a página ainda tá sendo um então a página tá sendo um
infinito aqui eu preciso no fim das contas depois que ele fez tudo somar um na página então o que que eu tô fazendo aqui Eu peguei a página o valor da página atual e somei mais um isso daqui é o símbolo para eu somar mais um na variável que tem esse mesmo nome tá agora sim ó Felipe Gustavo Espíndola e José Inácio dos Santos vamos ver quem que é a pessoa que está no começo da página 3 José Inácio dos Santos certinho legal bom a gente já sabe que isso aqui funciona para três páginas né
mas ass Sim a gente não tá juntando Isso numa numa base só agora a gente precisa juntar isso tudo dentro de uma base só então a gente pegou a página pegou os atletas pegou as e pegou o a sopa dos atletas pegou os atletas de fato e agora preciso jogar isso aqui dentro de uma outra de uma outra lista onde a gente vai ter a lista máxima de todos os Atletas né a gente vai ter uma lista pequena pegando os atletas de cada página e agora a gente tem que ter uma lista grande onde a
gente vai jogar todos os atletas de todas as as páginas Então vou chamar uma variável aqui chamada All athletes também vou falar que ela é uma uma lista vazia e aqui no fim antes da gente somar a página Inclusive eu vou falar que eu vou pegar essa All athletes e vou fazer uma extensão dela né a gente vai usar o extend dessa variável chamada atletes Qual que é a diferença do append que a gente usou lá pro extend o append a gente vai pegar itens e jogar dentro de uma lista o extend a gente vai
pegar listas e vai jogar dentro de uma lista maior e os itens dessa lista menor faram parte da lista da do item da lista maior então a gente não vai ter uma lista de listas a gente vai continuar tendo uma lista de itens individuais aqui uma lista de atletas maravilha então se eu botar isso aqui para rodar de novo ã ã hã temos algum problema aqui ó ó o o nosso erro é que um objeto dicionário não tem um atributo extend realmente né Eu falei que eu coloquei uma lista mas eu coloquei abrir e fechei
Chaves eu preciso abrir e fechar colchetes colchetes são as as Então temos aqui os nossos atletas E aí agora vejam que a gente tem aqui uma lista onde a gente tem os atletas da primeira página uma lista com os atletas da segunda e uma lista com os atletas da terceira Se a gente fosse usar o append no fim a gente ia ter uma lista grande com três itens menores seriam em cada um desses itens são as as listas aqui só que não é bem o que a gente quer a gente quer trazer uma lista com
todo mundo print atletes Ele trouxe uma lista só com toda a galera que a gente tá querendo trazer beleza bom a gente já tá conseguindo fazer aqui com que essa nossa interação acabe numa quantidade x de páginas Mas a gente nunca sabe qual vai ser a quantidade de páginas né então por exemplo se a gente tiver pegando aqui mulheres de faixa branca a gente tem aqui 870 itens né então a gente vai ter aqui uma quantidade de páginas muito menor né 80 87 aqui a gente tem uma quantidade de páginas muito menor né então a
gente precisa saber todas Ve as vezes que a gente for fazer essa interação que ele pare sozinho quando ele não encontrar mais itens como que a gente vai fazer isso primeiro de tudo a gente vai vir aqui dentro da nossa par eu vou falar o seguinte se por acaso ele não encontrar uma tabela se ele não encontrar uma tabela if not table ele retorna então aqui ele nem vai fazer o restante daqui se ele não tiver tabela automaticamente ele já vai retornar aqui e assim também só por via das dúvidas se por acaso ele encontrar
uma tabela e El não encontrar as linh dessa tabela também vai retornar Ok vamos declarar ela de novo aqui agora com isso a gente consegue fazer o seguinte ó a gente tem um parâmetro que vai passar aqui o número da página vai pegar os itens dessa página e vai tentar trazer os atletas dessa sopa de atletas aqui se por acaso IFES el vai então el para ele vai quebr vai loop fazer o que tiver que fazer depois prisa mais B que a gente não fique infinitamente pensando PR gente ver alguma coisa acontecendo PED el imprimir
a página PR gente eu colocar Ainda assim eu vou colocar na página três tá Faltou o ponto os dois pontos aqui no fim ó 1 2 3 terminou na página três ele conseguiu encontrar tudo em todas as páginas e maravilha ele não quebrou e trouxe as páginas pra gente agora eu vou pedir para ele começar lá na página 135 não tem mais nada né 130 ah ele não vai ter porque eu eu tô aqui no no outro filtro né op Black Bel vamos pegar aqui página 135 não trouxe ninguém 134 aqui eu vou pedir para
ele trazer a partir da página 132 e a gente quer que ele automaticamente pare quando ele chegar aqui na na última página como que a gente vai fazer isso eu não quero que ele ele compare nada agora com com a quantidade de páginas eu quero que ele continue verdadeiro sempre esse w true é como se a gente tivesse fazendo um Loop Infinito o que vai quebrar esse loop é exatamente o que a gente tem aqui embaixo Então vou pedir para ele começar aqui na página 132 2 3 4 5 ó a 5 ele não encontrou
nada e parou Vamos dar um print aqui dos nossos All atletes Ele trouxe pra gente aqui o Mateus Viana Magalhães que tá na página 132 vamos ver página 132 Maravilha está funcionando está funcionando certinho vamos voltar aqui na página deixar na página 132 mesmo depois a gente deixa ele rodando aqui o o total essa página aqui então olha só para que a gente não veja ela Peg uma página que não existe eu vou deixar ela aqui então a gente só vai imprimir a página se por acaso a gente tiver alguma coisa dentro dos atletas Tá
bom então 32 33 34 acabou vamos imprimir isso aqui Maravilha bom agora a gente vai chamar aqui a gente vai declarar uma outra variável chamada dataframe ATL a gente vai criar um Data Frame onde a gente vai chamar o nosso Nosa da biblioteca pandas e como a gente tá trabalhando com Jon aqui né um dicionário dentro do do Python nada mais é do que um Jon eu vou pedir para ele fazer um Jon normalize dessa nossa All atletes deixa eu dar mais um enter aqui deixa aqui assim tá bom ele vai fazer um normalize da
da ALL atletes Opa e aí eu vou pedir para ele imprimir esse esse Data Frame Ele trouxe pra gente aqui agora num formato bonito de tabela bom agora a gente pode imprimir isso imprimir não né salvar isso aqui em algum lugar a gente vai salvar isso daqui dentro do Google Drive mesmo pra gente fazer isso a gente pode vir aqui dentro de arquivos eu vou clicar nesse botãozinho aqui pra gente fazer pra gente montar o drive o que que ele basicamente vai fazer ele vai conectar o meu o meu notebook né vai conectar aqui esse
ambiente que eu tô usando para fazer a execução que chama notebook dentro do meu Google Drive montando aqui legal montou e agora eu vou guardar ele aqui dentro dentro desse aula web scrapping que é a página que a gente que a gente criou ele vai ficar aqui dentro de drive ele tá aqui dentro de my drive e aqui aqui de dentro de mydrive ele vai ter a página web scrapping aula web scrapping e assim por diante Então vamos lá vou dar um nome desse meu arquivo Vou salvar ele no arquivo Excel Excel file é igual
esse comecinho ele vai ser sempre igual tá content drive caso a gente queira salvar dentro do nosso drive não dentro de um drive compartilhado my drive aí a gente vai passar aqui o nome da pasta que chama web aula web deixa eu até tentar renomear ela aqui que daí eu não corro o o risco de ter um erro de digitação e o nome do nosso arquivo vai ser athletes xlsx aí a gente vai salvar ele então vou pegar esse meu Data Frame que eu acabei de criar atrit e eu vou usar aqui a função to
Excel do pandas aqui a gente vai passar o nome né o nome é o esse Excel aqui que a gente pegou é o o nome que a gente declarou aqui em cima e eu não quero salvar a a coluna de index então index igual false vou deixar rodando aqui e a gente vai ter o nosso web scrapping salvo em tabela em alguns segundos aqui apareceu temos ele aqui bonitinho agora todas as pessoas que a gente trouxe eles estão aqui né eles têm poucos pontos realmente se a gente pedir para ele pegar da página um vou
comentar esse aqui só pra gente ver ele funcionando bonito while page menor iG 3 rodou bonitinho DF vamos salvar agora ele vai pegar esse arquivo aqui ele vai subir substituir o arquivo basicamente né aqui acho que não deu tempo ainda Hum será que ele não salvou deixa eu tentar de novo ter salvado só não devo estar com paciência suficiente para esperar né vou rodar ele de novo aqui vamos imprimir el aqui para ver se ele tá trazendo o correto é trouxe Felipe Andrew Eric Muniz e assim por diante Vamos ver aí Ele trouxe bonitinho agora
pra gente Felipe Andre trouxe todas as páginas dentro do mesmo da mesma tabela Maravilha está funcionando agora a gente tem um desafio um pouco maior né A gente pegou somente a galera dessa categoria aqui con kimon adulto masculino faixa preta e todos os pesos agora a gente precisa tentar separar isso aqui então vamos fazer o seguinte eh a gente vai precisar dar uma uma modificados código pra gente poder fazer tudo isso primeiro de tudo a gente precisa trazer os nossos filtros né Deixa eu cadê Aqui a nossa página dos Filtros deixa trazer aqui de novo
a nossa página de filtros aqui a gente precisa tentar Trazer isso daqui agora como que a gente vai fazer para trazer isso temos esses filtros aqui esses daqui são os nomes de cada um do as classes de cada um desses filtros a gente ainda falta trazer esse aqui do do Vision né que é o weight Filter e a gente vai navegar em cada um desses aqui e trazer todos os itens de todos eles né rooster que é o peso galo peso pena leve pena leve meio peso médio assim por diante e de todos eles aqui
então vamos fazer o seguinte vou jogar eles lá embaixo depois a gente sobe todos eles estão dentro deix deixa eu ver aqui se eu consigo encontrar todos eles estão dentro de uma de uma tag chamada option ou melhor todos eles tem uma tag chamada option né então vamos procurar ela aqui vamos procurar ela aqui ó a gente tem o option do ranking do do ranking a gente tem aqui o option da categoria adulto Master juvenil Kids a gente tem o option do do gêner que é masculino e feminino e a gente tem o option tem
que ter o option desse aqui também a gente tem o option desse aqui também ó a gente tá trazendo o weight Filter e trazendo todos os options dele vamos ver como é que a gente vai trazer isso e eu vou declarar uma variável chamada filters eu vou pegar essa minha sopa de atletas aqui independente da página não faz diferença por enquanto e eu vou tentar procurar o ID igual Cadê o ID ó o ID a gente vai tentar procurar onde o ID seja igual a weight Filter por exemplo waight Filter Vamos ver que que ele
vai trazer pra gente fazer o print dele Filter me trouxe a classe né Não não quero a classe eu quero todos os itens chamado options desse desse objeto aqui então eu vou tentar procurar todosos que chamada option não trouxe nada aqui pra gente agora também Mas a gente pode fazer o seguinte ó para cada item dentro de filters ele pode imprimir hã ã ele pode imprimir o item pra gente vamos ver o que que ele vai trazer agora ele começou a trazer alguma coisa né então aquilo era um objeto normalista não consegui imprimir ela inteira
mas agora quando eu itero eu consigo trazer aqui né agora eu quero trazer só o Vel Quero trazer o o velho que é esse aqui ó velho rooster velho Light feather velho feather que é o valor no fim das contas que é passado na nossa no nossos parâmetros esse daqui é o nome mas o parâmetro de fato que é passado é o que tá dentro de velho então vou pegar aqui velho legal ele trouxe uma linha vazia essa linha vazia eu não quero então eu posso falar que eu quero trazer somente a partir do item
do segundo item né que é o item começa a partir do um todas as listas começam a contar a partir do zero né então eu quero desconsiderar o zero e começar a contar a partir do um agora Ele trouxe rooster trouxe bonitinho aqui pra gente bom a gente vai precisar fazer isso deixa eu juntar isso tudo aqui dentro de um só a gente vai precisar fazer isso para todos os todos eles aqui então a gente fez esse pro pro weight Filter a gente vai ter que fazer esse aqui pro pro Filter S também Filter S
ó trouxe os dois então no fim a gente vai ter que criar uma função para isso aqui também né já que a gente vai ter que fazer isso daqui várias vezes então a gente vai chamar essa função de list filters e aqui eu vou passar dois itens o primeiro vai ser a s que vai ser o que a gente vai jogar aqui dentro né sopa e o segundo item é esse nome do id aqui Filter ID Filter ID aí no fim a gente não vai querer imprimir né a gente quer retornar esse item Então olha
só eu vou fazer de uma forma um pouquinho mais elegante onde eu vou retornar numa linha só tudo que eu preciso fazer então eu quero retornar uma lista com o valor do item né item velho para cada item dentro dessa lista de filters aqui começando a partir do um é isso que eu preciso preciso retornar essa lista aqui Vamos fazer vamos ver se funciona list fazer um print direto list filters a gente vai passar aqui então a nossa sopa de atletas e o primeiro valor que eu quero pegar então vai ser esse filters s filters
s trouxe pra gente agora quero trazer um que a gente ainda não pegou o nome das faixas que éter Belt trouxe pra gente aqui também o nome das faixas muito bom bom agora a gente precisa eh deixar esses filtros em algum lugar né a gente precisa começar a deixar esses filtros em algum lugar Primeiro de tudo eu vou pegar essa minha função vamos deixar tudo bem organizado eu vou guardar ela aqui dentro deixa eu fechar isso tudo aqui para não ficar bagunça e aí aqui a gente vai declarar Então os nossos filtros como a gente
não tem uma sopa A gente só começa a ter a nossa sopa a partir daqui eu preciso criar uma sopa para poder trazer esses filtros então eu vou criar uma sopa aqui get page content onde a gente vai passar o RL os headers e os parameters vai pegar esses aqui que é o padrão que a gente já tem tá legal agora a gente pode ter aqui o nosso filtro de ranking Então a gente vai ter o nosso ranking na verdade não é ranking né é faixa Calma aí deixa eu procurar direitinho aqui o nome ah
a gente tem aqui a nossa Divisão a gente tem aqui a nossa faixa a gente tem aqui o nosso gênero a nossa categoria esse daqui é o é o kimono tá chamando de ranking aqui mas é o kimono Então vou colocar aqui kimono list filters a gente vai passar a sopa que a gente tem aqui em cima a sopa de filtros e a gente vai passar o ID dessa opção que é o filters s e agora a gente vai fazer a mesma coisa para todo o restante Então a gente vai ter aqui o segundo que
é a categoria a categoria category E a gente vai passar o filters huning category e eu não vou fazer todos os outros aqui porque é exatamente a mesma coisa tá então eu vou só copiar e colar aqui da minha da minha colinha e agora a gente tem aqui todos os nossos filtros posso imprimir todos eles aqui para vocês verem print kimono category gender Belt Division Division legal temos aqui o nosso primeiro item nossa primeira lista segunda lista terceira lista e assim por diante o nosso desafio agora vai ser um um pouco maior a gente vai
ter que arrumar a maneira de criar a combinação de todo mundo que tem aqui dentro e é por isso que a gente tem essa biblioteca chamada Tools essa product ela de fato faz uma lista onde a gente vai ter a combinação de tudo que a gente tem aqui dentro tá de tudo que a gente tem aqui dentro então a gente vai fazer o seguinte vamos voltar aqui no nosso nosso código da página e eu vou fazer o seguinte enquanto a página for menor que do porque senão vai muita for menor do que do a gente
vai fazer o seguinte a gente tem aqui o nosso All ates ele vai precisar ser sempre um né ele não vai poder ficar sendo Zerado eu vou identar isso daqui um pouquinho pra direita e eu vou ter que fazer uma iteração para cada combinação daquelas lá né Então olha só eu vou colocar aqui algumas abreviações então para kimono categoria gênero faixa visão dentro dessa lista que vai ser gerada de produtos onde também a gente vai colocar aqui o kono cat category gender Belt e Division para cada combinação dessa ele vai fazer isso aqui beleza mas
antes só pra gente matar a curiosidade o que que ele traz aqui vamos ver products is not define é Claro porque o nome é product sem o s no fim então vamos fazer o seguinte ó mandar ele imprimir isso aqui tudo para cada combinação eu quero que ele Imprima isso aqui para mim aqui é a mesma coisa né de digitação Então olha só ele trouxe uma combinação gigantesca de tudo que tem aqui né de tudo com tudo e é nisso que a gente vai ter que iterar daqui a pouquinho Então olha só para cada combinação
dessa para cada combinação dessa eu vou primeiro imprimir aqui para cada combinação e para cada página né é é é é é scrapping e aí eu Opa falta um fzin aqui eu quero trazer o r o c não é não é R é k o k o c o g b d o g b d g b d pra página eu vou trazer a página aqui também beleza bom assim como a gente já faz aqui a atualização né alteração do nosso do nosso dicionário pra página a gente vai fazer a mesma coisa para todos os
outros itens Então vou pegar aqui todos os itens que de fato mudam alguma coisa aqui parameters colocar aqui na verdade vamos colocar isso daqui entre colchetes colchetes que esse daqui é o nome do campo que a gente quer que a gente quer alterar lá do nosso objeto para me certo e aqui o nosso kimono vai ser o k a gente vai passar o valor do k aqui a gente vai passar o valor do C aqui a gente vai passar o valor do G aqui a gente vai passar o valor da do b e aqui a
gente vai passar o valor do d de divisão e a gente não precisa de vírgula né porque que eu tô deixando as vírgulas c k g b d e por último a nossa página certo bom com isso a gente vai fazer a interação dentro disso daqui tudo eu vou começar a deixar rodando mas eu não vou rodar tudo não tá começar a rodar aqui eu não preciso mais imprimir essa página deixa eu parar e rodar de novo só para não ficar feio Então olha tá começando a fazer os scrapping né página um página dois página
um página dois e assim por diante Hum então vou fazer o seguinte também ó vou pegar aqui do item zero até o item cinco só pra gente poder ver essa lista daqui Menorzinha também ã [Música] ã Ah não dá para fazer isso aqui tudo bem vamos rodar aqui de novo ele tá pegando todos os itens de todas as páginas aqui Maravilha só que aí tem uma coisa né como é que a gente vai saber quem que é o quê Eu não sei agora quem que é quem que é do kimono tal quem que é da
categoria tal a gente precisa dar uma ajustada aqui no nosso código para poder pegar essa galera então olha só aqui dentro da nossa parce atlit a gente pode colocar algumas categorias aqui alguma alguns parâmetros a mais aqui dentro mono para poder compor o nosso o nosso objeto Então a gente tem o ranking a gente tem as pontuações a gente tem aqui também o kimono Essas são informações que não vão sair da das tabelas né mas elas vão ser de fato passadas diretamente pela pelo parâmetro e agora a hora que a gente começar a rodar isso
daqui ele vai até fazer diferente ó até PR gente pra gente poder fazer isso daqui funcionar que eu acho que vai ficar legal vou chamar isso aqui de produto ou melhor chamar isso aqui de combination filters filters nada melhor do que filters a gente vai ter uma lista ali né em filters vamos ver se ele deixa aqui a gente fazer isso agora do zero até o até o c é não deixa ele não deixa mesmo vamos deixar bonitinho aqui emão então sem isso e aí eu vou deixar nosso código rodando em alguns minutos depois que
ele terminar de rodar eu vou voltar com o vídeo pra gente poder continuar tá então vou dar um play aqui ele vai começar opa calma aí tem alguma coisa errada Claro que tem faltou alguns parâmetros aqui né a gente precisa passar os parâmetros do kimono da categoria e tudo mais aqui dentro dos nossos atletas vou colocar para rodar eu vou deixar ele rodando aí E daqui a pouquinho a gente volta e finalmente acabou depois aqui de rodar por todas as combinações possíveis né inclusive algumas que não faz muito sentido mas é é pra questão aqui
do nosso da nossa apresentação não tem problema né então por exemplo não existe categoria pesado para crianças né Independente se é feminino masculino nem na faixa branca aqui né também não existe criança criança faixa preta mas assim pro pro nosso exercício acho que é um bom um bom exemplo bom vamos dar uma olhada aqui no nosso Data Frame temos aqui o uma galera agora a gente tem aqui 16.000 linhas eu vou botar para rodar pra gente salvar isso daqui dentro do Excel ele leva um tempinho porque agora a gente tá falando de 16.000 linhas né
não mais de 20 e aqui dentro a gente tem a nossa tabela com todas as linhas deixa ele abrir aqui ó a gente tem as fotos vamos ver se a gente consegue abrir uma foto aqui a gente tem uma foto ó trouxe a foto bonitinho a gente tem aqui também os detalhes então a gente pode tentar abrir os detalhes aqui e temos aqui o nosso código funcional para ele poder carregar todas as páginas e trazer realmente todo mundo a única diferença que a gente tem que mudar aqui é que a gente precisa deixar aqui como
se fosse um um loop infinito e deixar esse outro do esse outro essa outra linha desmarcada ou ou melhor deixar essa outra linha comentada agora daqui a gente consegue fazer o download dessa planilha né não existe ainda uma biblioteca uma biblioteca não um conector do Power bi específico pra gente poder consultar e Excel de dentro do Google Drive Mas se vocês pedirem aqui com colocarem aqui nos comentários curtirem bastante esse vídeo eh a gente consegue gravar mais um Onde eu posso mostrar para vocês como que a gente consegue baixar exatamente qualquer coisa de dentro do
Google Drive né Google sheet csv json eh Excel e o que mais a gente quiser de maneiras seguras Ok então pessoal eh essa aula foi isso Eu espero ver vocês de novo em algum momento no futuro até mais e aí que chão hein conteúdo riquíssimo hein de altíssimo nível altíssimo valor também e avançado avançado para você que quer evoluir Ir Além do Power bi pegar outras ferramentas aí importantes do mercado e também ter esse knh esse diferencial porque hoje Python é um grande diferencial para você que é analista de dados ou analista de bi então
ó se você quer mais conteúdos com o Paulo saa se você deseja que ele se torne digamos mais um dos nossos especialistas que trazem conteúdo com frequência comenta aqui embaixo ó quais conteúdos que você gostaria de ver aqui com o Grande Mestre Paulo saia Espero que você tenha gostado veijo você em um próximo vídeo grande [Música] abraço