Question

J'entends des gens écrire ces programmes tout le temps et je sais ce qu'ils font, mais comment font-ils réellement? Je cherche des concepts généraux.

Était-ce utile?

La solution

Techniquement, la capture d'écran est un programme qui récupère les données d'affichage d'un autre programme et les ingère pour son propre usage.

Très souvent, la capture d'écran fait référence à un client Web qui analyse les pages HTML du site Web ciblé pour extraire des données formatées. Cela se produit lorsqu'un site Web ne propose ni flux RSS ni API REST permettant d'accéder aux données de manière programmatique.

Un exemple de bibliothèque utilisée à cette fin est Hpricot pour Ruby, qui est l'un des meilleurs analyseurs HTML archivés utilisés pour le nettoyage d’écran.

Autres conseils

Beaucoup de réponses précises ici.

Ce que personne n'a dit, c'est ne le faites pas!

Le grattage d'écran est ce que vous faites lorsque personne ne vous a fourni une interface lisible par une machine. C'est difficile à écrire et fragile.

A titre d'exemple, considérons un agrégateur RSS, puis un code qui obtient les mêmes informations en travaillant via une interface de blog à orientation humaine normale. Lequel se brise lorsque le blogueur décide de changer de présentation?

Bien sûr, vous n’avez parfois pas le choix: (

En général, un grattoir d’écran est un programme qui capture la sortie d’un programme serveur en imitant les actions d’une personne assise devant le poste de travail à l’aide d’un navigateur ou d’un programme d’accès au terminal. à certains moments clés, le programme interprète la sortie puis prend une action ou extrait certaines quantités d'informations de la sortie.

À l'origine, cela était fait avec les sorties caractère / terminal des ordinateurs centraux pour extraire des données ou mettre à jour des systèmes archaïques ou non directement accessibles à l'utilisateur final. En termes modernes, cela signifie généralement d'analyser la sortie d'une requête HTTP pour extraire des données ou effectuer une autre action. avec l'avènement des services Web, ce genre de chose aurait dû disparaître, mais toutes les applications ne fournissent pas une bonne API pour interagir.

Un grattoir d’écran télécharge la page html et extrait les données intéressées en recherchant des jetons connus ou en les analysant au format XML ou autre.

Dans les premiers temps des ordinateurs personnels, les grattoirs d’écran émulaient un terminal (par exemple, IBM 3270) et se prétendaient un utilisateur afin d’extraire et de mettre à jour de manière interactive les informations sur l’ordinateur central. Plus récemment, le concept est appliqué à toute application fournissant une interface via des pages Web.

Avec l’émergence de la SOA, la capture d’écran est un moyen pratique de permettre aux services d’activer des applications qui ne le sont pas. Dans ces cas, le grattage de page Web est l’approche la plus courante.

Voici un tout petit extrait d'écran mis en œuvre dans Javascript , à l'aide de jQuery (choix inhabituel, remarquez-le, le fait de gratter étant généralement une activité client-serveur):

//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.');

Si vous exécutez Firebug , copiez le code ci-dessus et collez-le dans la console et visualisez-le en action ici même sur cette page de questions.

Si SO modifie les conventions de structure / noms de classe d'élément DOM / chemin d'accès URI, tous les paris sont désactivés et cela peut ne plus fonctionner - c'est le risque habituel dans les tentatives de raclage d'écran lorsqu'il n'y a pas de contrat / entente entre les parties (le racleur). et le scrapee [ oui je viens d'inventer un mot ]).

Techniquement, la capture d’écran est un programme qui récupère les données d’affichage d’un autre programme et les ingère pour son propre usage.Au début des PC, les grattoirs d’écran émulaient un terminal (par exemple, IBM 3270) et se faisaient passer pour un utilisateur. afin d'extraire de manière interactive, mettre à jour des informations sur le mainframe. Plus récemment, le concept est appliqué à toute application fournissant une interface via des pages Web.

Avec l’émergence de la SOA, la capture d’écran est un moyen pratique de permettre aux services d’activer des applications qui ne le sont pas. Dans ces cas, le grattage de page Web est l’approche la plus courante.

Très souvent, la capture d'écran fait référence à un client Web qui analyse les pages HTML du site Web ciblé pour extraire des données formatées. Cela se produit lorsqu'un site Web ne propose ni flux RSS ni API REST permettant d'accéder aux données de manière programmatique.

Généralement, vous avez une page HTML contenant les données que vous souhaitez. Ce que vous faites est que vous écrivez un programme qui va chercher cette page Web et tente d'extraire ces données. Cela peut être fait avec des analyseurs XML, mais pour les applications simples, je préfère utiliser des expressions régulières pour faire correspondre un point spécifique du code HTML et extraire les données nécessaires. Cependant, il peut parfois être difficile de créer une bonne expression régulière, car le code HTML environnant apparaît plusieurs fois dans le document. Vous souhaitez toujours faire correspondre un élément unique aussi proche que possible des données dont vous avez besoin.

Le grattage d'écran est ce que vous faites lorsque personne ne vous a fourni une interface lisible par une machine. C'est difficile à écrire et fragile.

A titre d'exemple, considérons un agrégateur RSS, puis un code qui obtient les mêmes informations en travaillant via une interface de blog à orientation humaine normale. Lequel casse lorsque le blogueur décide de changer de présentation.

Un exemple de bibliothèque utilisée à cette fin est Hpricot pour Ruby, qui est l’un des analyseurs syntaxiques HTML les mieux architecturés utilisés pour le grattage d’écran.

Vous avez une page HTML contenant les données que vous souhaitez. Ce que vous faites est que vous écrivez un programme qui va chercher cette page Web et tente d'extraire ces données. Cela peut être fait avec des analyseurs XML, mais pour les applications simples, je préfère utiliser des expressions régulières pour faire correspondre un point spécifique du code HTML et extraire les données nécessaires. Cependant, il peut parfois être difficile de créer une bonne expression régulière, car le code HTML environnant apparaît plusieurs fois dans le document. Vous souhaitez toujours faire correspondre un élément unique aussi proche que possible des données dont vous avez besoin.

  

Le grattage d'écran est ce que vous faites lorsque personne ne vous a fourni une interface lisible par une machine. C'est difficile à écrire et fragile.

Pas tout à fait vrai. Je ne pense pas que j'exagère quand je dis que la plupart des développeurs n'ont pas assez d'expérience pour écrire des API décentes. J'ai travaillé avec des entreprises de grattage d'écran et souvent les API sont tellement problématiques (allant des erreurs cryptiques aux mauvais résultats) et souvent ne donnent pas toutes les fonctionnalités que le site Web fournit, il peut être préférable de filtrer l'écran (grattage web si vous le souhaitez. volonté). Les portails extranet / site Web sont utilisés par plus de clients / courtiers que de clients API et sont donc mieux pris en charge. Dans les grandes entreprises, les modifications apportées aux portails extranet, etc. sont peu fréquentes, généralement parce qu’elles ont été externalisées et qu’elles sont maintenant maintenues. Je me réfère davantage à la suppression d'écran où la sortie est adaptée, par exemple. un vol sur une route et une heure particulières, un devis d'assurance, un devis d'expédition, etc.

Pour ce faire, il suffit parfois d’un client Web pour extraire le contenu de la page en une chaîne et d’utiliser une série d’expressions régulières pour extraire les informations souhaitées.

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

Évidemment, dans un environnement à grande échelle, vous écririez un code plus robuste que celui ci-dessus.

  

Un gratte écran télécharge le code HTML   page, et extrait les données   intéressé soit par la recherche de   jetons connus ou l'analyse en tant que XML ou   certains tels.

C’est une approche plus propre que les expressions rationnelles ... en théorie, mais en pratique, ce n’est pas aussi simple, étant donné que la plupart des documents devront être normalisés en XHTML avant que vous puissiez utiliser XPath, nous avons finalement trouvé le meilleur réglage possible. les expressions régulières étaient plus pratiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top