comment soumettre une requête .page aspx en python
J'ai besoin de gratter les résultats de la requête à partir d'une .page web aspx.
http://legistar.council.nyc.gov/Legislation.aspx
L'url est statique, alors comment puis-je soumettre une requête à cette page et obtenir les résultats? Supposons que nous avons besoin de sélectionner "tous les ans" et "tous les types" à partir de la liste déroulante des menus.
Quelqu'un il faut savoir comment le faire.
Vous devez vous connecter pour publier un commentaire.
Comme un aperçu, vous aurez besoin d'effectuer des quatre tâches principales:
La demande et la réponse http de la manipulation se fait avec des méthodes et des classes à partir de Python standard library urllib et urllib2. L'analyse des pages html qui peut être fait avec Python standard library HTMLParser ou avec d'autres modules tels que Belle Soupe
L'extrait de code suivant montre le demander et recevoir d'une recherche sur le site indiqué dans la question. Ce site est ASP-piloté et comme un résultat, nous devons nous assurer que nous envoyons plusieurs champs de formulaire, certains d'entre eux avec 'horrible' valeurs que ceux-ci sont utilisés par la logique ASP maintenir l'état et à authentifier la demande, dans une certaine mesure. En effet, la soumission. Les demandes doivent être adressées avec la méthode http POST que c'est ce qui est attendu de cette application ASP. La principale difficulté est d'identifier le champ de formulaire et de valeurs associées à laquelle ASP attend (arriver pages avec Python est la partie facile).
Ce code est fonctionnel, ou plus précisément, était fonctionnelle, jusqu'à ce que j'ai enlevé la plupart des VSTATE valeur, et peut-être introduit une faute de frappe ou deux en ajoutant des commentaires.
Que pour l'obtention de la première page. Comme dit ci-dessus, puis on aurait besoin pour analyser la page, c'est à dire trouver les pièces de l'intérêt et de les rassembler de manière appropriée, et de les stocker de fichier/base de données/où. Ce travail peut être fait dans de très nombreuses façons: en utilisant les analyseurs html, ou XSLT type de technogies (en effet, après l'analyse de l'html, xml), ou même pour brut d'emplois, la simple expression régulière. Aussi, un des éléments typiquement extraits c'est le "à côté de l'info", c'est à dire un lien de toutes sortes, qui peut être utilisé dans une nouvelle requête au serveur pour obtenir les pages suivantes.
Cela devrait vous donner une vague idée de ce que "longue main" html grattage est d'environ. Il existe de nombreuses autres approches, telles que l'dédié utilties, les scripts dans Mozilla (FireFox) GreaseMonkey plug-in, XSLT...
HTTP_USER_AGENT
chaîne à utiliser pour un navigateur donné est de visiter all-nettools.com/toolbox/environmental-variables-test.php cette page va vous montrer les valeurs d'en-tête envoyé par le navigateur, rechercher "HTTP_USER_AGENT". La chaîne réelle dépend de l'OS et la version et version de Chrome, mais regarder quelques " commeMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36
Le sélénium est un excellent outil à utiliser pour ce genre de tâche. Vous pouvez spécifier les valeurs d'un formulaire que vous souhaitez entrer et récupérer le code html de la page de réponse comme une chaîne de caractères dans un couple de lignes de code python.
À l'aide de Sélénium vous pourriez ne pas avoir à faire le travail manuel de la simulation d'un poste valide la demande et de l'ensemble de ses variables cachées, comme je l'ai découvert après beaucoup d'essais et d'erreur.
Plus ASP.NET sites (celui que vous avez référencé compris) il fait publier leurs requêtes vers eux-mêmes à l'aide de HTTP POST verbe, et non pas le verbe GET. C'est pourquoi l'URL ne change pas comme vous l'avez noté.
Ce que vous devez faire est de regarder le code HTML généré et de capturer toutes leurs valeurs d'un formulaire. Assurez-vous de saisir toutes les valeurs d'un formulaire, comme certains d'entre eux sont utilisés pour la validation de la page et sans eux, votre POST demande sera refusée.
Autres que la validation, une page ASPX en ce qui concerne le décapage et le détachement n'est pas différent que les autres technologies web.
Le code dans les autres réponses a été utile; je n'aurais jamais été capable d'écrire mon robot sans.
Un problème que j'ai rencontré a été de cookies. Le site, j'étais en train de ramper été en utilisant des cookies pour enregistrer l'id de session/trucs de sécurité, j'ai donc dû ajouter du code pour obtenir mon robot au travail:
Ajouter cette importation:
Init le cookie trucs:
Installer
CookieJar
de sorte qu'il est utilisé comme valeur par défautCookieProcessor
dans le défaut de l'ouvreur gestionnaire:Voir ce que les cookies le site utilise:
Ce enregistre les cookies:
"Supposons que nous avons besoin de sélectionner "tous les ans" et "tous les types" à partir de la liste déroulante des menus."
Que faire de ces options à l'URL qui vous est soumis.
Après tout, il s'élève à une requête HTTP envoyée par
urllib2
.Ne sais comment faire ""tous les ans" et "tous les types" à partir de la liste déroulante des menus vous de faire les suivants.
Sélectionnez " "tous les ans" et "tous les types" à partir de la liste déroulante des menus
Notez l'URL qui est en fait soumis.
Utiliser cette URL dans
urllib2
.