Quels sont les avantages et les inconvénients de différentes façons d'analyser les sites Web?

StackOverflow https://stackoverflow.com/questions/918605

Question

Je voudrais écrire un code qui ressemble à un site Web et ses actifs et crée des statistiques et un rapport. Les actifs comprennent des images. Je voudrais être en mesure de retracer les liens, ou du moins essayer d'identifier les menus sur la page. Je voudrais aussi essayer de deviner ce que la CMS a créé le site, en fonction des noms de classe et autres.

Je vais supposer que le site est raisonnablement statique, ou est entraîné par un CMS, mais pas quelque chose comme un RIA.

Des idées sur la façon dont je pourrais progresser.

1) Site de charge dans un iFrame. Ce serait bien parce que je pourrais analyser avec jQuery. Ou pourrais-je? On dirait que je serais gêné par des règles de cross-site scripting. J'ai vu des suggestions pour contourner ces problèmes, mais je suppose que les navigateurs continueront à réprimer de telles choses. Est-ce qu'un bookmarklet aider?

2) add-on Firefox. Cela me permettrait de contourner les problèmes de script inter-site, non? Semble faisable, parce que les outils de débogage pour Firefox (et Greasemonkey, pour cette matière) vous permettent de faire toutes sortes de choses.

3) Prenez le site du côté du serveur. Utilisez les bibliothèques sur le serveur pour analyser.

4) YQL. Est-ce pas à peu près construite pour les sites l'analyse syntaxique?

Était-ce utile?

La solution

Cela dépend vraiment de l'ampleur de votre projet. Si c'est juste décontracté, pas entièrement automatisé, je suggère fortement un Firefox Addon.

Je suis au milieu d'un projet similaire. Il doit analyser les DOM d'une page générée en utilisant Javascript. L'écriture d'un navigateur côté serveur était trop difficile, donc nous avons tourné vers d'autres technologies: Adobe AIR, Firefox Addons, UserScripts, etc.

addon Fx est grande, si vous n'avez pas besoin de l'automatisation. Un script peut analyser la page, vous montrer les résultats, vous demander de corriger les parties, qu'il est incertain et enfin publier les données sur une backend. Vous avez accès à tous les DOM, de sorte que vous n'avez pas besoin d'écrire un JS / CSS / HTML / whatever analyseur (ce serait l'enfer d'un emploi!)

Une autre façon est Adobe AIR. Ici, vous avez plus de contrôle sur l'application - vous pouvez le lancer en arrière-plan, faire tout l'analyse syntaxique et d'analyse sans votre intervention. L'inconvénient est - vous n'avez pas accès à toutes les DOM des pages. La seule façon d'aller passer est de mettre en place une simple approximation, qui va chercher l'URL cible, ajoute un certain Javascript (pour créer un pont de bac à sable authentifiées non sécurisé) ... Il est un hack sale, mais cela fonctionne.

Edit: Dans Adobe AIR, il y a deux façons d'accéder au DOM d'un site étranger:

  • Charger via Ajax, créer l'objet HTMLLoader, et d'alimentation de la réaction en elle (méthode loadString IIRC)
  • Créer un iframe, et chargez le site dans Sandbox non approuvé.

Je ne me souviens pas pourquoi, mais la première méthode m'a échoué pour, donc je devais utiliser l'autre (je pense qu'il y avait des raisons de sécurité impliqués, que je ne pouvais pas contourner). Et je devais créer un bac à sable, à DOM site d'accès. Voici un peu de traiter avec des ponts bac à sable . L'idée est de créer un proxy, qui ajoute simple JS, qui crée childSandboxBridge et expose quelques méthodes pour le parent (dans ce cas: l'application AIR). Le contenu du script est quelque chose comme:

window.childSandboxBridge = {
   // ... some methods returning data
}

(attention - il y a des limites de ce qui peut être passé par le pont de bac à sable - pas d'objets complexes pour vous utiliser uniquement les types primitifs)

Ainsi, le proxy essentiellement falsifié toutes les demandes qui sont retournés HTML ou XHTML. Tous les autres vient d'être adopté sans modification. Je l'ai fait en utilisant Apache + PHP, mais pourrait être fait avec un vrai proxy avec certains plugins / modules personnalisés pour vous. De cette façon, j'ai eu l'accès aux DOM d'un site.

fin modifier .

La troisième façon que je connaisse, la manière la plus dure - mettre en place un environnement similaire à ceux Browsershots . Ensuite, vous utilisez Firefox avec l'automatisation. Si vous avez un Mac OS X sur un serveur, vous pouvez jouer avec ActionScript, pour faire l'automatisation pour vous.

Donc, pour résumer:

  • PHP / script côté serveur - vous devez implémenter votre propre navigateur, moteur JS, analyseur CSS, etc., etc. entièrement sous contrôle et automatisé à la place
  • .
  • Firefox Addon - a accès aux DOM et toutes choses. Requiert que l'utilisateur pour le faire fonctionner (ou au moins une session ouverte avec Firefox une sorte de autoreload). Interface agréable pour un utilisateur pour guider le processus.
  • Adobe AIR - nécessite un ordinateur de bureau de travail, plus difficile que de créer un addon Fx, mais plus puissant
  • .
  • navigateur automatique - plus d'un problème de programmation de bureau qui webdevelopment. Peut être mis en place sur un terminal Linux sans environnement graphique. Nécessite des compétences de piratage informatique de maître. :)

Autres conseils

Ma suggestion serait:

a) Choisissez un langage de script. Je suggère Perl ou Python. Bash aussi curl + mais pas mal la gestion des exceptions

b) Charger la page d'accueil via un script, en utilisant un python ou d'une bibliothèque perl. Essayez Perl WWW :: Mechanize module.

Python a beaucoup du module intégré, essayez un regard aussi www.feedparser.org

c) Vérifiez l'en-tête du serveur (via la commande HTTP HEAD) pour trouver le nom du serveur d'applications. Si vous êtes chanceux, vous trouverez également le nom CMS (WordPress diamètre interne, etc.).

d) utiliser l'API Google XML pour demander quelque chose comme « lien: sitedomain.com » pour trouver des liens pointant vers le site: à nouveau, vous trouverez des exemples de code pour Python sur google page d'accueil. demandant également classement des domaines Google peut être utile.

e) Vous pouvez collecter les données dans un SQLite db, puis les afficher dans Excel processus.

Il vous suffit de chercher la source (XHTML / HTML) et l'analyser. Vous pouvez le faire dans presque toutes les langues de programmation moderne. À partir de votre ordinateur qui est connecté à Internet.

iframe est un widget pour afficher le contenu HTML, ce n'est pas une technologie d'analyse des données. Vous pouvez analyser les données sans l'afficher partout. Vous ne même pas besoin d'un navigateur.

Outils dans des langages comme Python, Java, PHP sont certainement plus puissant pour vos tâches que Javascript ou tout ce que vous avez dans ces extensions Firefox.

Il n'a pas d'importance ce que la technologie se cache derrière le site. XHTML / HTML est juste une chaîne de caractères, peu importe la façon dont un navigateur rend. Pour trouver vos « actifs » vous regarderez simplement pour les balises HTML spécifiques comme « img », « objet » etc.

Je pense qu'une écriture d'une extension Firebug serait proabably être l'un des plus simple à faire avec. Par exemple YSlow a été développé au-dessus de Firebug et fournit quelques-unes des caractéristiques que vous recherchez (par ex l'image, CSS et JavaScript résumés).

Je vous suggère d'essayer l'option n ° 4 d'abord (YQL): La raison étant qu'il ressemble à cela pourrait vous obtenir toutes les données dont vous avez besoin et vous pouvez alors construire votre outil comme un site Web ou tel où vous pouvez obtenir des informations sur un site sans avoir à aller à la page dans votre navigateur. Si YQL fonctionne pour ce dont vous avez besoin, il semble que vous auriez le plus de flexibilité avec cette option.

Si YQL ne pas marché, alors je vous suggère d'aller avec l'option # 2 (un addon firefox).

Je pense que vous devriez probablement essayer et rester à l'écart de l'option n ° 1 (Iframe) en raison des problèmes de script intersites que vous êtes déjà au courant.

De plus, je l'ai utilisé Option # 3 (Prenez le site du côté du serveur) et un problème que je l'ai rencontré dans le passé est le site accaparés le contenu de chargement après le fait en utilisant appels AJAX. A l'époque je n'ai pas trouvé une bonne façon de saisir le contenu complet des pages qui utilisent AJAX - SO méfiez-vous des OBSTACLE QUE! D'autres personnes ici ont couru dans ce aussi, voir ceci: Grattez un site Web dynamique

LA QUESTION DE CONTENU AJAX DYNAMIQUE: Il peut y avoir des solutions à la question de ajax, comme l'utilisation d'AJAX lui-même pour saisir le contenu et l'utilisation des evalScripts: true paramètre. Voir les articles suivants pour plus d'informations et une question que vous pourriez avoir besoin d'être au courant de la façon dont le javascript évalué à partir du contenu étant saisi des œuvres:

Bibliothèque de Prototype: http://www.prototypejs.org/api/ajax/updater

Message: http: //www.crackajax. net / forums / index.php? action = vthread & forum = 3 & topic = 17

Ou si vous êtes prêt à dépenser de l'argent, jetez un oeil à ceci: http://aptana.com/jaxer/guide/develop_sandbox.html

Voici une vilaine (mais peut-être utile) par exemple d'utiliser un composant .NET WebRobot au contenu rebut d'un site compatible AJAX dynamique tel que Digg.com. http://www.vbdotnetheaven.com/UploadFile/fsjr/ajaxwebscraping09072006000229AM/ajaxwebscraping. aspx

On y trouve aussi un article général sur l'utilisation de PHP et la bibliothèque Curl à la ferraille tous les liens d'une page Web. Cependant, je ne sais pas si cet article et la bibliothèque Curl couvre la question du contenu AJAX: http://www.merchantos.com/makebeta/php/scraping -liens-with-php /

Une chose que je viens de penser à qui pourrait fonctionner est:

  1. saisir le contenu et l'évaluer en utilisant AJAX.
  2. envoyer le contenu à votre serveur.
  3. évaluer la page, liens, etc ..
  4. [OPTION] enregistrer le contenu comme une page locale sur votre serveur.
  5. retourner les informations statistiques retour à la page.
  6. affichage [OPTION] mises en cache version locale avec mise en évidence.

^. Remarque: Si vous enregistrez une version locale, vous voulez utiliser des expressions régulières pour convertir les chemins de liaison relatifs (pour les images en particulier) correctes

Bonne chance! Juste s'il vous plaît être conscient de la question AJAX. De nombreux sites se chargent aujourd'hui du contenu dynamiquement en utilisant AJAX. Digg.com fait, MSN.com fait pour ses flux de nouvelles, etc ...

Étant avant tout un programmeur .Net ces jours-ci, mon conseil serait d'utiliser C # ou une autre langue avec des liaisons .Net. Utilisez le contrôle pour charger la page , puis itérer à travers les éléments du document (via GetElementsByTagName () ) pour obtenir des liens, des images, etc. Avec un peu de travail supplémentaire (analyse de la balise BASE, le cas échéant), vous pouvez résoudre src et attributs href dans URL et utilisez la balise HttpWebRequest pour envoyer des requêtes HEAD pour les images cibles pour déterminer leur taille. Cela devrait vous donner une idée de la façon dont graphiquement intensive la page est, si c'est quelque chose qui vous intéresse. D'autres articles que vous pourriez être intéressé à inclure dans vos statistiques pourraient inclure des backlinks / pagerank (via l'API Google), si la page valide HTML ou XHTML , quel est le pourcentage de liens lien vers URL dans le même domaine par rapport à l'extérieur du site, et, si possibles, les classements Google pour la page pour différentes chaînes de recherche (dunno si c'est disponible par programmation, cependant).

J'utiliser un script (ou une application compilée en fonction de la langue choisie) écrite dans une langue qui a un appui solide pour l'analyse réseau et texte / expressions régulières.

  • Perl
  • Python
  • Langue .NET de choix
  • Java

quelle que soit la langue que vous êtes plus à l'aise. Un script / app stand de base seul, vous empêche de avoir à se soucier trop sur l'intégration du navigateur et les problèmes de sécurité.

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