Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
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.
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?
>
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?
Complexa e trabalhosa ahahahah
Trabalhando com expressão regular e ou simplexml_load_file para procurar os elementos...
Mas ainda não entendi o porque você quer fazer isso... ? Talvez tenha outra forma mais simples.
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?
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?
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...
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).
Esqueci de adicionar os links:
[Chrome]
https://developer.chrome.com/extensions/webRequest
[Firefox]
https://developer.mozilla.org/en-US/docs/Observer_Notifications#HTTP_requests
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?
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
>
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.
>
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.
@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:
http://forum.imasters.com.br/topic/550246-pegar-parte-de-uma-pagina/
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.
@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"?
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?