Comment utiliser CrawlSpider de scrapy pour cliquez sur un lien avec javascript onclick?
je veux scrapy pour analyser les pages où aller sur le lien suivant ressemble à ceci:
<a href="#" onclick="return gotoPage('2');"> Next </a>
scrapy être en mesure d'interpréter le code javascript?
livehttpheaders extension, j'ai découvert qu'en cliquant sur Suivant génère un POST avec un énorme morceau de "déchets" de départ comme ceci:
encoded_session_hidden_map=H4sIAAAAAAAAALWZXWwj1RXHJ9n
je suis en train de construire mon araignée sur le CrawlSpider
classe, mais je ne peux pas vraiment comprendre comment le code,BaseSpider
j'ai utilisé le parse()
méthode pour traiter de la première URL, ce qui arrive à être un formulaire de connexion, où j'ai fait un POST avec:
def logon(self, response):
login_form_data={ 'email': 'user@example.com', 'password': 'mypass22', 'action': 'sign-in' }
return [FormRequest.from_response(response, formnumber=0, formdata=login_form_data, callback=self.submit_next)]
et puis j'ai défini submit_next() pour dire quoi faire ensuite. Je ne comprends pas comment dire à CrawlSpider quelle méthode utiliser sur la première URL?
toutes les requêtes de mon crawling, sauf la première, sont des requêtes POST. Ils alternent deux types de requêtes: coller des données, et cliquer "Suivant" pour aller à la page suivante.
2 réponses
La méthodologie proprement dite sera comme suit:
- Poster votre demande à rejoindre la page (comme vous le faites)
- extraire le lien vers la page suivante de cette réponse particulière
- demander simplement la page suivante si possible ou utiliser FormRequest de nouveau dans la zone applicable
tout cela doit être rationalisé avec le mécanisme de réponse du serveur, E. g:
- Vous pouvez essayer d'utiliser
dont_click = true
FormRequest.from_response
- Ou vous pouvez vous voulez gérer la redirection (302) venant du serveur (auquel cas vous devrez mentionner dans le méta que vous avez besoin de la requête de redirection handle pour être envoyé aussi à la callback.)
Maintenant, comment faire pour comprendre tout cela: Utilisez un débogueur Web comme fiddler ou vous pouvez utiliser Firefox plugin FireBug, ou tout simplement hit F12 dans IE 9; et vérifiez les requêtes qu'un utilisateur fait réellement sur le site correspondent à la façon dont vous rampez la page web.
j'ai construit un rampeur rapide qui exécute JS via le sélénium. N'hésitez pas à copier / modifier https://github.com/rickysahu/seleniumjscrawl