2009-07-08 12 views
1

J'essaie d'automatiser l'extraction de données à partir d'un site Web et je ne sais vraiment pas par où commencer. Un de nos fournisseurs nous donne accès à certaines données d'enregistrement d'équipement via une application en ligne "Business Objects 11". Si vous n'êtes pas familier avec cette application en ligne, pensez-y comme un générateur de rapport basé sur le Web. Le problème est que j'essaie de surveiller beaucoup d'équipements et que ce fournisseur n'a créé qu'une demande pour extraire un journal à la fois. Cette requête prend le numéro d'équipement, la date de début et la date de fin ... Pour ne rien arranger, nous ne pouvons exporter que vers le format binaire Excel puisque l'export de "csv" est cassé et ils refusent de le réparer ... donc nous sont limités par la limite de 65 536 lignes d'Excel ... (ce qui équivaut à 3-4 jours d'enregistrement de données dans mon cas). Je ne peux pas créer une nouvelle demande car seul le fournisseur dispose des droits d'administration nécessaires. À votre avis, quelle serait la façon la plus élégante d'exécuter un grand nombre de demandes (environ 800) via une interface graphique Web? Je suppose que je pourrais coder en dur les positions de la souris, cliquer sur les événements et les frappes avec des retards et tout ... Mais il doit y avoir un meilleur moyen.Automatiser la navigation dans le navigateur et l'extraction de données

J'ai lu à propos des scripts AutoHotKey et AutoIt, mais ils semblent être limités quant à ce qu'ils peuvent faire sur le web. Aussi ... Je suis coincé avec IE6 ... Mais si vous connaissez un moyen qui implique un autre navigateur, je suis toujours très intéressé par votre réponse.

(une fois que j'ai les fichiers journaux locaux, l'extraction des données est pas un problème)

Répondre

1

Il y a certaines choses que vous pourriez essayer. Si le site est un html et que les rapports peuvent être demandés par un simple POST ou GET alors urlib/urlib2 et les modules cookielib Python devraient suffire pour aller chercher un document Excel.

Ensuite, vous pouvez essayer ceci: xlrd pour extraire des données d'Excel. En outre, regardez: http://pamie.sourceforge.net /. Je n'ai jamais essayé moi-même, mais semble prometteur et facile à utiliser.

+0

Merci, Pamie fonctionne très bien! Le seul problème que j'ai maintenant est de le faire fonctionner avec certains widgets personnalisés d'applications :(. (Une sorte de zone de texte personnalisée dans un cadre en-tête ...) Pour l'instant, l'utilisation d'AutoIt pour certaines pièces difficiles semble être une solution viable Peut-être que quelqu'un connaît un moyen de contourner cette limitation. –

0

Normalement, je suggère de ne pas utiliser IE (ou tout autre navigateur) du tout. Rappelez-vous, les logiciels de navigateur Web sont juste des programmes proxy pour faire des requêtes http et afficher les résultats de manière significative. Il existe d'autres façons de faire des demandes http similaires et de traiter les réponses. Presque toutes les langues modernes ont ceci intégré dans son API quelque part. C'est ce qu'on appelle le grattage d'écran ou le grattage Web. Mais pour compléter cette suggestion, j'ai besoin d'en savoir plus sur votre environnement de programmation: par exemple, dans quel langage de programmation envisagez-vous d'écrire ce script?

Un exemple typique en utilisant C# où vous venez d'obtenir le résultat html sous forme de chaîne ressemblerait à ceci:

new System.Net.WebClient().DownloadString("http://example.com"); 

Vous analysez ensuite la chaîne pour trouver tous les champs dont vous avez besoin et envoyer une autre demande. La classe WebClient possède également une méthode .DownloadFile() que vous pourriez trouver utile pour récupérer les fichiers Excel.

+0

La langue elle-même n'est pas un problème.Je suis plutôt un développeur C/C++ mais j'ai beaucoup travaillé avec VB/VBS, C#, Java, Bash, etc. J'ai un peu travaillé avec PHP, mais c'est à peu près tout ce qui concerne les "langages web". Vous avez raison sur les requêtes http mais j'ai l'impression que l'analyse syntaxique des réponses brutes d'une telle application web serait très complexe ... Ou peut-être pas ... –

+0

@Decapsuleur: Analyser la réponse html avec regexps a l'air merdique, mais fonctionne étonnamment bien pour les pages générées automatiquement. –

+0

Je n'utiliserais pas regex - il devient vraiment moche correspondant aux balises imbriquées et similaires. La fonction de chaîne manuelle finit plus simple à implémenter et à maintenir. –

0

Étant donné que vous pouvez utiliser .NET, vous devez envisager d'utiliser le contrôle Windows Forms WebBrowser. Vous pouvez l'automatiser pour naviguer vers le site, appuyer sur des boutons, etc. Une fois la page de rapport chargée, vous pouvez utiliser le code pour naviguer dans le DOM HTML afin de trouver les données que vous voulez - aucune expression régulière impliquée.

J'ai fait quelque chose comme ça il y a des années, pour extraire des données d'enchères d'eBay.

Questions connexes