Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago Lenzi

Ajuda com requisições

Recommended Posts

Bom dia pessoal.

 

Existe alguma Classe que, ao indicar um link.

 

Ex: globo.com

 

Ela, a classe retorna todos os links internos ou externos que a webPage requisitou?

 

Ex. Img, Css, Js, Vídeo, Mp3, Links da Record, Youtube...

 

Enfim, todas as requisições.

 

Desde já, meu obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até que nível isso? Porque imagina que a página adiciona um arquivo javascript, e esse arquivo adiciona uma imagem ou mesmo outro arquivo javascript que adiciona outro e assim vai... meio complicado hein...

 

O que exatamente você pretende fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até que nível isso? Porque imagina que a página adiciona um arquivo javascript, e esse arquivo adiciona uma imagem ou mesmo outro arquivo javascript que adiciona outro e assim vai... meio complicado hein...

 

O que exatamente você pretende fazer?

Bravo!

 

Dois níveis são o suficientes.

 

Mas se tiver qualquer coisas além, será bem vindo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Não conheço biblioteca/classe que faça isso.


Talvez você consiga fazer carregando o conteúdo da página como texto e buscando os elementos de imagem/js/css/etc, usando expressão regular, interpretando os comandos... mas não vai ser muito simples...


Não existe outra forma de fazer o que você precisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Não conheço biblioteca/classe que faça isso.
Talvez você consiga fazer carregando o conteúdo da página como texto e buscando os elementos de imagem/js/css/etc, usando expressão regular, interpretando os comandos... mas não vai ser muito simples...
Não existe outra forma de fazer o que você precisa?

 

E como seria essa alternativa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok. Em um projeto especial, tenho que fazer praticamente um web scraping, capturando todos os links externos da página.

 

No entanto, essas páginas, não possuem um padrão para que possamos usar DomxPath ou similar.

 

Sendo assim, precisamos simular o acesso humano para chamar os eventuais ajax de 2 nível e assim, se possível, armazenar todos os links que foram requisitados pela página que estamos trabalhando.

 

O que sugere?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é.

 

A única outra forma que consigo pensar no momento seria você criar uma extensão para o browser, porque o browser disponibiliza uma API que você consegue capturar/monitorar TODAS as requisições HTTP feitas em qualquer lugar (páginas, imagens, js, css, etc). Mas não sei se no seu caso é viável. Você tem que fazer dentro do sistema? O que você vai fazer com o resultado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode me dar alguns links e dicas dessa API?

 

Bom, a priori, isso deverá ser dentro do sistema pois são milhares de páginas. Minha função e trabalhar na captura e criptografar o Out para salvar no BD.

 

Após isso, é com o pessoal do python, R...

Compartilhar este post


Link para o post
Compartilhar em outros sites
Tem a do Google Chrome e a do Firefox (outros provavelmente deve ter também).


Uma extensão pode se comunicar com páginas também, inclusive fazer requisições AJAX, etc (basicamente tudo que uma página normal pode fazer).


Nunca trabalhei com extensão para o Firefox, mas para o Chrome é relativamente simples. Você precisa de um arquivo manifest.json com as configurações da extensão e um arquivo background.js com seu código javascript, que fica rodando o tempo todo enquanto o browser estiver aberto. Exemplo funcional usando essa API webRequest:


arquivo manifest.json:


{
"manifest_version" : 2,

"version" : "1",
"name" : "Teste",

"background" : {
"scripts" : ["background.js"]
},

"permissions" : [
"webRequest", "http://*/", "https://*/"
]
}


arquivo background.js:


var requestFilter = {
urls : ["*://*/*"]
};

chrome.webRequest.onBeforeRequest.addListener(function(request){
// exibe no console da extensão o endereço de qualquer requisição (sem exceção)
// feita por qualquer página que tenha o padrão de requestFilter;
// é possível enviar os dados para algum servidor usando AJAX, salvar
// no localStorage, etc
console.info(request.url);
}, requestFilter);


Para testar: coloque esses dois arquivos dentro de uma pasta, acesse o endereço chrome://extensions/, habilite a opção "Modo do desenvolvedor", arraste a pasta com os 2 arquivos para a aba de extensões do Chrome, clique na opção "Inspecionar visualizações: página de plano de fundo" dessa extensão que acabou de ser instalada, na janela que abrir clique na aba "Console" e então acesse qualquer página pelo Chrome (os endereços serão exibidos no console).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa, é esse o resultado que preciso.

 

Pelo que eu vi é semelhante ao "F12".

 

Não encontrei na documentação em que eu possa integrar ao nosso sistema.

 

Conhece alguma coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu ainda acho o simple_html_dom.php

Link:

http://simplehtmldom.sourceforge.net/

 

Falou em web scraping/ crawler/ spider penso nele...

 

Já que quase um 'Seletor jQuery way'.

O mais complicado mesmo é achar o padrão (id/class/childen/node e afins).

 

 

Mas, a galera do node.js, deve ter alguma carta na manga....

https://github.com/sylvinus/node-crawler

https://github.com/cgiffard/node-simplecrawler

 

 

Bom 'spider' pra ti xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa, é esse o resultado que preciso.

 

Pelo que eu vi é semelhante ao "F12".

 

Não encontrei na documentação em que eu possa integrar ao nosso sistema.

 

Conhece alguma coisa?

 

A extensão roda em plano de fundo... o F12 que você se refere é o console do navegador, existe para qualquer página, inclusive para extensões. Você estava apenas inspecionando a extensão, exatamente como faz com uma página comum.

 

Para integrar no sistema, você pode usar AJAX e enviar os dados para seu servidor (como se estivesse em uma página... dá até para incluir bibliotecas, como o jQuery...).

 

Mas tem um porém, né... o usuário do sistema vai ter que instalar a extensão para poder utilizar essa funcionalidade (você pode até colocar a extensão na chrome webstore quando estiver pronta)... então não sei se é muito prático/viável.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu ainda acho o simple_html_dom.php

Link:

http://simplehtmldom.sourceforge.net/

 

Falou em web scraping/ crawler/ spider penso nele...

 

Já que quase um 'Seletor jQuery way'.

O mais complicado mesmo é achar o padrão (id/class/childen/node e afins).

 

 

Mas, a galera do node.js, deve ter alguma carta na manga....

https://github.com/sylvinus/node-crawler

https://github.com/cgiffard/node-simplecrawler

 

 

Bom 'spider' pra ti xD

Concordo com você. O que complica é a falta de padrão.

 

No entanto, os links que passou são muito interessantes. Vou ter que aprender coisas novas. Obrigado.

 

 

Mas tem um porém, né... o usuário do sistema vai ter que instalar a extensão para poder utilizar essa funcionalidade (você pode até colocar a extensão na chrome webstore quando estiver pronta)... então não sei se é muito prático/viável.

 

Anderson, agradeço a força. Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites
@Thiago Lenzi você pode tentar especializar/restringir sua busca com expressão regular após já ter usado o dompdf.



Ex: seleciona via seletor com o phpdom e depois usa a E.R. para caçar a palavra.


Pros:

Diminui a especialização da E.R.


Contras:

Aumenta o tempo de latência


Exemplo nesse Post:




Porem para Spiders não vejo tanto problema, até pq uma pagina normalmente não tem tanta informação assim...

E caso seja uma varredura você pode quebrar o processamento em partes e chamar via CRON de n° tempos.


Recentemente um amigo fez um Spider para monitorar todos os preços de players grandes, a abordagem técnica foi a de cima...

E funcionou que foi uma beleza haha..

Espero ter ajudado.


Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@gabrieldarezzo Boa.

 

Isso terá um grande valor em meus códigos Frankenstein por aqui. De verdade.

 

No entanto, dando um passo a mais. E como podemos resolver a questão do segundo nível?

 

Exemplo, para nodes que estão dentro de um AJAX que somente será visível após a manipulação do "mouse"?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.