2010-10-10 25 views
2

Ici, il est suggéré qu'il est possible de "comprendre ce que fait le JavaScript et de l'émuler dans votre code Python:" C'est ce que je voudrais aider à faire, c'est à dire ma question. Comment émuler javascript: __ doPostBack?Emulation javascript _dopostback en python, web scrapping

code à partir d'un site web (source pleine page ici LINK.

<a style="color: Black;" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$gvSearchResults','Page$2')">2</a> 

Bien sûr, j'ai savoir essentiellement idée où aller d'ici

Merci d'avance pour votre aide et des idées

Ok, il y a beaucoup de messages demandant comment CLIQUER un bouton javascript quand scrapping web avec les bibliothèques python mécaniser, beautifulsoup ...., similaire.Je vois beaucoup de réponses "ce qui n'est pas supporté" utilisent cette solution non python. un python La solution à ce problème serait très bénéfique pour beaucoup. Dans cette optique, je ne cherche pas de réponses comme utiliser x, y ou z qui ne sont pas du code python ou qui nécessitent d'interagir avec un navigateur.

+0

Vous devez ajouter des liens vers le texte auquel vous faites référence, et non LINK. –

Répondre

3

La page mécaniser ne suggère pas que vous pouvez émuler JavaScript en Python. Il est dit que vous pouvez changer un champ caché dans un formulaire, ainsi tromper le serveur Web qu'un humain a sélectionné le champ 1. Vous devez toujours analyser la cible vous-même.

Il n'y aura pas de solution basée sur Python à ce problème, sauf si vous souhaitez créer un interpréteur JavaScript en Python.

My thoughts sur ce problème ont m'a conduit à trois solutions possibles:

  1. créer une application XULRunner
  2. navigateur automatisation
  3. tentative d'interpréter le code côté client

Parmi les trois, je n'ai vraiment vu la discussion de 2. J'ai vu quelque chose près de 1 dans une application commerciale de raclage ion, où vous créez essentiellement des scripts en naviguant sur des sites et en sélectionnant des éléments sur les pages que vous souhaitez extraire dans le futur.

1 pourrait éventuellement fait de travailler avec un script Python en acceptant une sérialisation (JSON?) De wsgi objets de demande, obtenir l'application pour aller chercher l'URL , puis envoyer la page traitée comme un objet de réponse wsgi. Vous pouvez éventuellement enrober un intergiciel autour de urllib2 pour y parvenir. Overkill probablement, mais plutôt amusant à penser.

2 est généralement réalisé via Selenium RC (Remote Control), un outil centré sur les tests . Il fournit quelques méthodes comme getHtmlSource, mais la plupart des gens que j'ai entendu utiliser ne reçoivent pas son API.

3 Je n'en ai aucune idée. node.js est très chaud en ce moment, mais je n'ai pas l'a touché. Je n'ai jamais pu construire spidermonkey sur ma machine Ubuntu , donc je n'ai pas touché à ça non plus.Mon intuition est que pour faire cela, vous fournissez la source HTML et vos coordonnées à un interpréteur JS , qui aurait besoin de faire semblant d'être votre User-Agent etc au cas où le JavaScript voulait se reconnecter avec le serveur.

1 bien, techniquement plus, un JavaScript User-Agent conforme, ce qui est presque toujours un navigateur web utilisé par un

+0

Merci, pour une excellente explication de pourquoi je ne peux pas le faire :-) En fait, au moins maintenant, j'ai une meilleure compréhension du problème. Merci encore. – Vincent

+1

Cela semble être une solution. http://code.google.com/p/spynner/ – Vincent

+0

Doux! Belle trouvaille, merci! –

0

humaine La meilleure méthode est d'utiliser un navigateur Web au lieu. Nous utilisons iMacros for Firefox pour web scraping avec un très bon succès. Il fonctionne également à partir de Python (nous l'utilisons avec C#). L'inconvénient de l'utilisation d'un navigateur Web est que vous n'obtenez pas les mêmes performances qu'avec un outil sans tête comme Mechanize. Mais l'énorme avantage est que cela fonctionne avec n'importe quel site Web.

+0

Eh bien iMacros m'a conduit à trouver http://juicedpyshell.googlecode.com/svn/trunk/doc/html/index.html qui semble intéressant. – Vincent

+0

Outil intéressant, qui dit que je trouve «mécaniser» très lent pour nos besoins. J'utilise 'scrapy'. –