Question

Veuillez indiquer comment supprimer les pages AJAX.

Était-ce utile?

La solution

Présentation:

Toute suppression d’écran nécessite d’abord une vérification manuelle de la page à partir de laquelle vous souhaitez extraire des ressources. Lorsque vous travaillez avec AJAX, vous devez généralement analyser un peu plus que le HTML.

Lorsque vous utilisez AJAX, cela signifie simplement que la valeur que vous souhaitez ne se trouve pas dans le document HTML initial que vous avez demandé, mais que le javascript est exécuté, qui demande au serveur les informations supplémentaires que vous souhaitez.

Vous pouvez donc généralement simplement analyser le javascript et voir quelle requête il fait et appeler simplement cette URL dès le début.

Exemple:

Prenez ceci comme exemple, supposons que la page que vous voulez extraire ait le script suivant:

<script type="text/javascript">
function ajaxFunction()
{
var xmlHttp;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    try
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    catch (e)
      {
      alert("Your browser does not support AJAX!");
      return false;
      }
    }
  }
  xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
      {
      document.myForm.time.value=xmlHttp.responseText;
      }
    }
  xmlHttp.open("GET","time.asp",true);
  xmlHttp.send(null);
  }
</script>

Ensuite, tout ce que vous avez à faire est plutôt de faire une requête HTTP à time.asp du même serveur. Exemple de w3schools .

Raclage avancé avec C ++:

Pour une utilisation complexe et si vous utilisez C ++, vous pouvez également envisager d'utiliser le moteur JavaScript javascript de firefox SpiderMonkey. exécuter le javascript sur une page.

Raclage avancé avec Java:

Pour une utilisation complexe et si vous utilisez Java, vous pouvez également envisager d’utiliser le moteur JavaScript javascript de Firefox pour Rhino.

Raclage avancé avec .NET:

Pour une utilisation complexe et si vous utilisez .Net, vous pouvez également envisager d'utiliser l'assembly Microsoft.vsa. Récemment remplacé par ICodeCompiler / CodeDOM.

Autres conseils

À mon avis, la solution la plus simple consiste à utiliser Casperjs , un framework basé sur les phantomjs du navigateur sans tête WebKit.

Toute la page est chargée et il est très facile de supprimer toutes les données relatives à ajax. Vous pouvez consulter ce didacticiel de base pour apprendre Automatisation & amp; Gratter avec PhantomJS et CasperJS

Vous pouvez également jeter un oeil à cet exemple de code, sur la façon de gratter Google suggère des mots clés:

/*global casper:true*/
var casper = require('casper').create();
var suggestions = [];
var word = casper.cli.get(0);

if (!word) {
    casper.echo('please provide a word').exit(1);
}

casper.start('http://www.google.com/', function() {
    this.sendKeys('input[name=q]', word);
});

casper.waitFor(function() {
  return this.fetchText('.gsq_a table span').indexOf(word) === 0
}, function() {
  suggestions = this.evaluate(function() {
      var nodes = document.querySelectorAll('.gsq_a table span');
      return [].map.call(nodes, function(node){
          return node.textContent;
      });
  });
});

casper.run(function() {
  this.echo(suggestions.join('\n')).exit();
});

Si vous y parvenez, essayez d’examiner l’arborescence DOM. Selenium effectue cette tâche dans le cadre du test d'une page. Il a également des fonctions permettant de cliquer sur les boutons et de suivre les liens, ce qui peut être utile.

Le meilleur moyen de gratter les pages Web à l'aide d'Ajax ou, en général, les pages à l'aide de Javascript, consiste à utiliser un navigateur lui-même ou un navigateur sans navigateur (un navigateur sans interface graphique). Actuellement, phantomjs est un navigateur sans tête très utilisé utilisant WebKit. Une alternative que j’ai utilisée avec succès est HtmlUnit (en Java ou .NET via IKVM , navigateur simulé. Une autre alternative connue consiste à utiliser un outil d'automatisation Web tel que Sélénium .

J'ai écrit de nombreux articles sur ce sujet, tels que en ligne, effaçant Ajax et Javascript. sites et authentification OAuth automatisée sans navigateur pour Twitter . À la fin du premier article, je compile de nombreuses ressources supplémentaires depuis 2011.

Dépend de la page ajax. La première partie de la suppression d'écran consiste à déterminer le fonctionnement de la page. Y at-il une sorte de variable que vous pouvez parcourir pour demander toutes les données de la page? Personnellement, j’ai utilisé Web Scraper Plus pour de nombreuses tâches liées au nettoyage d'écran, car elles sont peu coûteuses et faciles. pour commencer, les non-programmeurs peuvent le faire fonctionner assez rapidement.

Note latérale: Les conditions d’utilisation sont probablement un point à vérifier avant de procéder. Selon le site, itérer à travers tout peut soulever des drapeaux.

J'aime PhearJS , mais c'est peut-être en partie parce que je l'ai construit.

Cela dit, c’est un service exécuté en arrière-plan qui parle HTTP (S) et affiche les pages au format JSON, y compris les métadonnées dont vous pourriez avoir besoin.

En tant que solution à faible coût, vous pouvez également essayer SWExplorerAutomation (SWEA). Le programme crée une API d'automatisation pour toute application Web développée avec HTML, DHTML ou AJAX.

Je pense que la réponse de Brian R. Bondy est utile lorsque le code source est facile à lire. Je préfère un moyen simple d’utiliser des outils tels que Wireshark ou HttpAnalyzer pour capturer le paquet et obtenir l’URL de l’hôte " Host " champ et le champ "GET". champ.

Par exemple, je capture un paquet comme suit:

GET /hqzx/quote.aspx?type=3&market=1&sorttype=3&updown=up&page=1&count=8&time=164330 
 HTTP/1.1
Accept: */*
Referer: http://quote.hexun.com/stock/default.aspx
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: quote.tool.hexun.com
Connection: Keep-Alive

Ensuite, l'URL est la suivante:

http://quote.tool.hexun.com/hqzx/quote.aspx?type=3&market=1&sorttype=3&updown=up&page=1&count=8&time=164330

Selenium WebDriver est une bonne solution: vous programmez un navigateur et automatisez ce qui doit être fait dans le navigateur. Les navigateurs (Chrome, Firefox, etc.) fournissent leurs propres pilotes qui fonctionnent avec Selenium. Dans la mesure où il fonctionne comme un navigateur REAL automatisé, les pages (y compris javascript et Ajax) sont chargées de la même manière qu’un humain utilisant ce navigateur.

L’inconvénient est qu’elle est lente (car vous voudriez sans doute attendre le chargement de toutes les images et de tous les scripts avant de procéder au grattage de cette page).

J'ai déjà établi un lien avec le solvant du MIT et EnvJS en tant que ma réponse pour supprimer les pages Ajax. Ces projets semblent ne plus être accessibles.

Par pure nécessité, j’ai inventé un autre moyen de supprimer les pages Ajax et cela a fonctionné pour des sites difficiles, comme findthecompany, qui proposent des méthodes pour rechercher des moteurs JavaScript sans tête et ne pas afficher de données.

La technique consiste à utiliser des extensions chromées pour effectuer des opérations de grattage. Les extensions Chrome sont le meilleur endroit pour supprimer les pages Ajax car elles nous permettent en fait d'accéder au DOM modifié en javascript. La technique est la suivante, je vais certainement ouvrir le code source dans quelques temps. Créez une extension chrome (si vous savez comment en créer une, ainsi que son architecture et ses fonctionnalités. Il est facile à apprendre et à utiliser car il existe de nombreux exemples),

  1. Utilisez des scripts de contenu pour accéder au DOM à l’aide de xpath. Obtenez à peu près toute la liste ou la table ou le contenu rendu dynamiquement en utilisant xpath dans une variable sous forme de chaîne HTML Nodes. (Seuls les scripts de contenu peuvent accéder à DOM, mais ils ne peuvent pas contacter une URL à l'aide de XMLHTTP.)
  2. À partir du script de contenu, en transmettant le message, transmettez à un script d'arrière-plan l'ensemble du DOM épuré sous forme de chaîne. (Les scripts en arrière-plan peuvent parler aux URL mais ne peuvent pas toucher au DOM). Nous utilisons des messages de passage pour les faire parler.
  3. Vous pouvez utiliser différents événements pour parcourir les pages Web et transmettre chaque contenu de nœud HTML supprimé au script d'arrière-plan.
  4. Maintenant, utilisez le script d’arrière-plan pour dialoguer avec un serveur externe (sur localhost), un serveur simple créé avec Nodejs / python. Envoyez simplement les nœuds HTML entiers sous forme de chaîne, au serveur, où le serveur conservera simplement le contenu posté dans les fichiers, avec les variables appropriées pour identifier les numéros de page ou les URL.
  5. Vous avez maintenant gratté le contenu AJAX (les nœuds HTML en tant que chaîne), mais il s’agit de nœuds HTML partiels. Vous pouvez maintenant utiliser votre bibliothèque XPATH préférée pour les charger en mémoire et utiliser XPATH pour extraire des informations dans des tableaux ou du texte.

Veuillez commenter si vous ne pouvez pas comprendre et que je peux mieux l'écrire. ( premier essai ). De plus, j'essaie de publier un exemple de code le plus rapidement possible.

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