Pergunta

Eu ouço as pessoas que escrevem estes programas o tempo todo e eu sei o que eles fazem, mas como eles realmente fazê-lo? Estou à procura de conceitos gerais.

Foi útil?

Solução

Tecnicamente, screenscraping é qualquer programa que pega os dados de exibição de outro programa e ingere para seu uso próprio.

Muitas vezes, screenscaping refere-se a um cliente web que analisa as páginas HTML do site direcionado para extrair dados formatados. Isso é feito quando um site não oferece um feed RSS ou uma API REST para acessar os dados de forma programática.

Um exemplo de uma biblioteca usada para esta finalidade é Hpricot para Ruby, que é um dos melhores -architected HTML analisadores usados ??para captura de tela.

Outras dicas

Muitas respostas precisas aqui.

O que ninguém disse é não fazê-lo!

raspagem da tela é o que você faz quando ninguém está desde que com uma interface razoável legível por máquina. É difícil escrever, e quebradiços.

Como um exemplo, considere um agregador de RSS, em seguida, considere o código que obtém a mesma informação, trabalhando através de uma interface de blog orientada para o humano normal. Qual deles pausas quando o blogueiro decide mudar seu layout?

Claro que, às vezes você não tem escolha: (

Em raspador de tela um general é um programa que captura a saída de um programa de servidor por mimicing as ações de uma pessoa sentada em frente à estação de trabalho usando um navegador ou programa de acesso terminal. em certos pontos-chave do programa iria interpretar a saída e, em seguida, tomar uma ação ou extrair certas quantidades de informação a partir da saída.

Originalmente isso foi feito com personagens saídas / terminais de mainframes para extrair dados ou sistemas que eram arcaicas ou não directamente acessíveis ao usuário final a atualização. em termos modernos, isso normalmente significa analisando a saída de uma solicitação HTTP para extrair dados ou tomar alguma outra ação. com o advento de serviços web este tipo de coisa deveria ter morrido de distância, mas nem todos os aplicativos fornecem uma API agradável para interagir com.

Uma tela raspador de downloads na página html, e puxa os dados de interessados, quer através da procura de símbolos conhecidos ou analisá-lo como XML ou algo assim.

Nos primeiros dias de PCs, screen scrapers iria emular um terminal (por exemplo, IBM 3270) e fingir ser um usuário a fim de extrair de forma interativa, informações de atualização no mainframe. Em tempos mais recentes, o conceito é aplicado a qualquer aplicativo que fornece uma interface via páginas web.

Com surgimento de SOA, screenscraping é uma maneira conveniente para serviços permitem que os aplicativos que não são. Nesses casos, a raspagem página web é a abordagem mais comum tomadas.

Aqui está um pequeno pedaço de tela raspagem implementado em Javascript , usando jQuery (não é uma escolha comum, lembre-se, desde a raspagem é geralmente uma atividade de cliente-servidor):

//Show My SO Reputation Score
var repval = $('span.reputation-score:first'); alert('StackOverflow User "' + repval.prev().attr('href').split('/').pop() + '" has (' + repval.html() + ') Reputation Points.');

Se você executar Firebug , copie o código acima e colá-lo no Console e vê-lo em ação aqui neste página Pergunta.

Se SO altera os nomes estrutura DOM / classe elemento / convenções caminho do URI, todas as apostas estão fora e não pode trabalhar por mais tempo - que é o risco de costume na tela raspagem empreendimentos em que não há nenhum contrato / compreensão entre as partes (o raspador eo scrapee [ sim, eu acabei de inventar uma palavra ]).

Tecnicamente, screenscraping é qualquer programa que pega os dados de exibição de outro programa e ingere para ele é próprio use.In os primeiros dias do PC, screen scrapers iria emular um terminal (por exemplo, IBM 3270) e fingir ser um usuário em para extrair de forma interativa, informações de atualização no mainframe. Em tempos mais recentes, o conceito é aplicado a qualquer aplicativo que fornece uma interface via páginas web.

Com surgimento de SOA, screenscraping é uma maneira conveniente para serviços permitem que os aplicativos que não são. Nesses casos, a raspagem página web é a abordagem mais comum tomadas.

Muitas vezes, screenscaping refere-se a um cliente web que analisa as páginas HTML do site direcionado para extrair dados formatados. Isso é feito quando um site não oferece um feed RSS ou uma API REST para acessar os dados de forma programática.

Normalmente você tem uma página HTML que contém alguns dados que você deseja. O que você faz é escrever um programa que vai buscar essa página web e tentar extrair esses dados. Isso pode ser feito com analisadores XML, mas para aplicações simples Eu prefiro usar expressões regulares para corresponder a um ponto específico no HTML e extrair os dados necessários. Às vezes, pode ser complicado para criar uma boa expressão regular, no entanto, porque o HTML circundante aparece várias vezes no documento. Você sempre quer corresponder a um item exclusivo tão perto quanto possível para os dados que você precisa.

raspagem da tela é o que você faz quando ninguém está desde que com uma interface razoável legível por máquina. É difícil escrever, e quebradiços.

Como um exemplo, considere um agregador de RSS, em seguida, considere o código que obtém a mesma informação, trabalhando através de uma interface de blog orientada para o humano normal. Qual deles pausas quando o blogueiro decide mudar seu layout.

Um exemplo de uma biblioteca usada para esta finalidade é Hpricot para Ruby, que é um dos analisadores HTML melhor arquitetados utilizados para captura de tela.

Você tem uma página HTML que contém alguns dados que você deseja. O que você faz é escrever um programa que vai buscar essa página web e tentar extrair esses dados. Isso pode ser feito com analisadores XML, mas para aplicações simples Eu prefiro usar expressões regulares para corresponder a um ponto específico no HTML e extrair os dados necessários. Às vezes, pode ser complicado para criar uma boa expressão regular, no entanto, porque o HTML circundante aparece várias vezes no documento. Você sempre quer corresponder a um item exclusivo tão perto quanto possível para os dados que você precisa.

raspagem da tela é o que você faz quando ninguém está desde que com uma interface razoável legível por máquina. É difícil escrever, e quebradiços.

Não é completamente verdade. Eu não acho que estou exagerando quando digo que a maioria dos desenvolvedores não tem experiência suficiente para escrever decents APIs. Eu tenho trabalhado com empresas de raspagem de tela e muitas vezes as APIs são tão problemáticos (que vão desde erros enigmáticas a maus resultados) e muitas vezes não dão a funcionalidade completa que o site prevê que ele pode ser melhor para raspar tela (web arranhão se você vai). Os portais extranet / site são utilizados os meus mais clientes / corretores de clientes da API e, portanto, são melhor suportados. Em grandes empresas muda para extranet portais etc .. não são freqüentes, geralmente porque ele foi originalmente terceirizados e agora é apenas mantida. I referem-se mais a raspagem de tela em que a saída está adaptado, por exemplo um vôo em particular, rota e tempo, uma cotação de seguro, umas citações do transporte etc ..

Em termos de fazê-lo, ele pode ser tão simples como cliente web para puxar o conteúdo da página em uma seqüência e usando uma série de expressões regulares para extrair a informação que deseja.

string pageContents = new WebClient("www.stackoverflow.com").DownloadString();
int numberOfPosts = // regex match

Obviamente, em um ambiente de grande escala que você estaria escrevendo código mais robusto do que o anterior.

Uma tela raspador de downloads do html página e puxa os dados interessado, quer através da procura de conhecido fichas ou analisá-lo como XML ou algo assim.

Esta é a abordagem mais limpo do que regex ... em teoria .., no entanto, na prática não é tão fácil, dado que a maioria dos documentos vai precisar normalizados para XHTML antes que você possa XPath através dele, no final, encontrou a sintonia fina expressões regulares foram mais prático.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top