2009-03-10 6 views
1

J'essaye d'analyser un tas de pages Web l'une après l'autre avec PHP, mais j'ai remarqué que lorsque j'ouvre la première page, les liens vers les pages suivantes sont cachés en javascript.Comment résoudre un lien javascript caché avec php?

Est-ce que je peux continuer à analyser les pages Web suivantes? Si l'URL avait une variable comme "page = 2" cryptée, je passerais par là, mais les URL sont cryptées.

-LPG

Répondre

0

La seule façon serait d'écrire une expression régulière qui parse les liens javascript et les suit. Ce serait probablement ne fonctionnera que si l'URL de la page a été dans le code javascript, par exemple:

<a href="javascript:open('something/some_page.html');">Something</a> 

au lieu de simplement

<a href="javascript:open(someField.value);">Something</a> 

Parce qu'avec le second exemple, vous auriez fait de traiter le javascript lien en utilisant PHP, ce qui peut être très difficile. N'oubliez pas que vous devrez créer des expressions régulières spécifiques au site Web, car chaque site formate différemment ses URL. Alors Cnn.com pourrait mettre en forme leurs urls différemment Reddit.com

1

Fondamentalement, vous avez deux choix:

  1. émule leur logique
  2. émule un client valide

Si vous voulez aller aveC# 1 vous devrez lire leur code Javascript et comprendre comment cela fonctionne. Je ne peux pas vraiment l'expliquer mieux car cela dépend tellement de leur code; il suffit de connaître Javascript et de "grok" leur code. Ensuite, faites en sorte que votre code fasse la même logique pour générer l'URL "page suivante".

Si leur système utilise AJAX, vous pouvez toujours l'émuler (contrairement à ce que dit click-upvote). Pour ce faire, vous utilisez simplement un outil comme l'extension Firebug Firefox, de sorte que vous pouvez regarder ce que votre navigateur envoie à leur serveur "dans les coulisses". Ensuite, faites votre code envoyer une fausse requête HTTP qui imite leur requête AJAX. Vous pouvez réellement le faire même sans un outil comme Firebug: il suffit de déduire ce que votre navigateur va envoyer en regardant le code Javascript. Cependant, si vous utilisez quelque chose comme Firebug cela rendra les choses beaucoup plus faciles (au lieu d'inférer, vous pouvez juste voir ce qui est envoyé). Si vous voulez aller aveC# 1 à la place, vous devrez utiliser un navigateur réel (et le contrôler par programme en utilisant quelque chose comme Selenium), ou utiliser quelque chose comme Rhino pour exécuter le Javascript. L'utilisation d'un navigateur avec un système de contrôle comme Selenium est probablement le moyen le plus facile à utiliser. Cependant, il sera lent, car il est limité par le temps qu'il faut à votre navigateur pour rendre les pages et autres. Une solution utilisant Rhino ou quelque chose de similaire sera plus rapide, mais cela impliquera aussi beaucoup plus de travail (vous devrez analyser le HTML, inclure tous les fichiers JS pertinents, etc.), donc je ne le recommande que comme dernier recours.

Questions connexes