Ir para conteúdo
Fórum Script Brasil
  • 0

Web Scraping em páginas dinâmicas


Gawen

Pergunta

Olá pessoal, blz?

Estou precisando implementar um web scraping em um site dinâmico. Este site tem um formulário no qual se insere dados de pesquisa e que retorna as informações necessárias, como automatizar a busca de dados se somente depois de dar as palavras-chaves é que ele retorna as informações?

Grato se puderem me ajudar com algumas dicas.

Abraços,

Gawen

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Se as palavras-chaves puderem ser passadas por GET ou POST você poderia usar sockets para obter o resultado. Outra possibilidade seria usar o Selenium, que é um meio de automatizar/controlar o navegador (Chrome ou Firefox, por exemplo). Já usei o Selenium com .NET, mas já vi que existe para Python e achei um tutorial bem interessante aqui: http://pythonclub.com.br/selenium-parte-1.html

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0
7 horas atrás, Graymalkin disse:

Se as palavras-chaves puderem ser passadas por GET ou POST você poderia usar sockets para obter o resultado. Outra possibilidade seria usar o Selenium, que é um meio de automatizar/controlar o navegador (Chrome ou Firefox, por exemplo). Já usei o Selenium com .NET, mas já vi que existe para Python e achei um tutorial bem interessante aqui: http://pythonclub.com.br/selenium-parte-1.html

Abraços!

 

Opa, obrigado pela informação Graymalkin. Vou ver esse tutorial sobre o Selenium e pensar se é possível, tb, enviar as informações por GET ou POST.

Mas vou te contar, o site que preciso fazer essa busca é bem complicadinho, é o Banco de Teses da CAPES, dá uma olhada no código fonte dele para você ver o que to falando http://bancodeteses.capes.gov.br/banco-teses/#!/

Mas, obrigado pelas dicas!

Abraços

Gawen

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi, e tenho uma outra dica que deve te auxiliar neste caso também: no Google Chrome, clicar com o botão direito no elemento da página e escolher "Inspecionar". Esse recurso é bem prático e rápido para se encontrar o nome ou tag de um determinado elemento, e depois utilizar essa informação com o Selenium.

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0
1 minuto atrás, Graymalkin disse:

Entendi, e tenho uma outra dica que deve te auxiliar neste caso também: no Google Chrome, clicar com o botão direito no elemento da página e escolher "Inspecionar". Esse recurso é bem prático e rápido para se encontrar o nome ou tag de um determinado elemento, e depois utilizar essa informação com o Selenium.

Abraços!

 

Olá Graymalkin,

Grato por sua ajuda nessa minha árdua tarefa. Mas, não sei se será possível implementar algo em relação ao site em questão. Eu usei, pelo Firefox mesmo, o inspecionar elemento, é bem interessante. Contudo, quando estou na página de resultados da busca e faço essa inspeção de elmento ele me mostra uma coisa, mas no código da página (o que virá acredito eu, qdo eu conseguir fazer a pesquisa via web scraping) é outra, é muito louco esse site, nunca vi algo parecido!

Valeu mesmo pelas dicas, estou tentando aqui implementar e, pode ter certeza, se eu conseguir algo vou postar em no meu blog a solução que encontrei, porque vou te falar tá de rosca isso!!!

Abraços,

Gawen.

Link para o comentário
Compartilhar em outros sites

  • 0

Fala Gawen, tudo bom?

O retorno pode ser um JSON? 

Eu fiz esse snippet aqui utilizando a biblioteca "requests", conhece? Ela é bem bacana. 

 

import requests
import json

headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
payload = {'termo': "teste2", 'filtros': [], 'pagina': 1, 'registrosPorPagina': 20}

r = requests.post('http://bancodeteses.capes.gov.br/banco-teses/rest/busca', headers=headers, data=json.dumps(payload))

print r.text

Espero que sirva para você. Qualquer coisa nos avise!

Link para o comentário
Compartilhar em outros sites

  • 0
Em 04/03/2017 at 11:28, SoaresBruno disse:

Fala Gawen, tudo bom?

O retorno pode ser um JSON? 

Eu fiz esse snippet aqui utilizando a biblioteca "requests", conhece? Ela é bem bacana. 

 


import requests
import json

headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
payload = {'termo': "teste2", 'filtros': [], 'pagina': 1, 'registrosPorPagina': 20}

r = requests.post('http://bancodeteses.capes.gov.br/banco-teses/rest/busca', headers=headers, data=json.dumps(payload))

print r.text

Espero que sirva para você. Qualquer coisa nos avise!

 

Olá SoaresBruno,

Está funcionando perfeito esse script que fizestes, mas como conseguistes a informação do payload no site? Estou tentnado ver se consigo por um filtro por ano, mas mesmo com o 'filtros': []' no payload não tá funcionando se eu coloco valores alí

Tem como vc me dar uma ajuda com isso?

Abraços

Gawen

Link para o comentário
Compartilhar em outros sites

  • 0

@Gawen eu monitorei a requisição de rede pelo devtools do Chrome (F12).

Na aba "network" é possível ver as requisições e respostas entre o browser e o servidor.

Nesse caso específico, se filtrar por 2014 e 2015 por exemplo, o campo filtro ficará assim:

"filtros":[{"campo":"Ano", "valor":"2014"}, {"campo":"Ano", "valor":"2015"}]

Para descobrir os outros filtros deverá ser testado cada tipo para saber qual o nome e valor de cada campo.

;)

 

Link para o comentário
Compartilhar em outros sites

  • 0

@SoaresBruno Olá, tudo bem!

Cara esto tendo um outro problema na implementação desse webscrap, que é o seguinte, no placehold temos, entre outras, as seguintes informações: 

'pagina': 1, 'registrosPorPagina': 20

Só que, ao fazer a busca eu sei que tenho muito mais que 1 página e 20 registros, contudo eu não consigo acertar uma forma que dinamize esse número e me trata todos os registros em vez de unicamente os 20 primeiros. Já tentei colocar o número total no número de registrosPorPagina, mas dá erro, ele aceita um númeor máximo de 40 registros. Já tentei executar num laço for, para ir iterando o número de páginas, mas no meio da iteração dá erro e pára de rodar e não sei o que pode ser esse erro. A questão dos filtros eu consegui acertar com sua dica de monitorar pelo devtools, mas essa eu estou me debatendo e não estou conseguindo resolver, se você puder me dar um auxílio eu lhe agradeço muito.

Abraços,
Gawen

 

Link para o comentário
Compartilhar em outros sites

  • 0

Amigos, meu caso é semelhante, estou buscando dados num site usando Selenium / Beautiful Soup. Ocorre que, em determinadas etapas, preciso INTERAGIR com o usuário pelo script. Tentei colocar enterbox usando EasyGUI, mas queria saber se tem como pedir input sem apelar a esse terceiro recurso, alguém consegue me ajudar? 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...