2 votes

Python et mécaniser : Comment gratter des pages à la suite ?

Mon problème est le suivant : J'essaie d'écrire un scraper qui parcourt le processus de commande d'un site web de billetterie aérienne. Je veux donc scraper quelques pages qui dépendent des résultats des pages précédentes (j'espère que vous comprenez ce que je veux dire). J'en suis là pour l'instant :

    import mechanize, urllib, urllib2

    url = 'any url'
    br = mechanize.Browser()
    br.set_handle_robots(False)
    br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11')]
    br.open(url)
    response = br.response().read()

    br.select_form(nr=1)
    br.form.set_all_readonly(False)

    ## now I am reading out the variables of form(nr=1)

    for control in br.form.controls:
           if not control.name:
               print " - (type) =", (control.type)
               continue  
           print " - (name, type, value) =", (control.name, control.type, br[control.name])

    ## now I am modifying the variables
    br['fromdate'] = '2012/11/03'
    br['todate'] = '2012/11/07'

    ## now I am submitting the form and saving the output in the variable bookingsite
    response = br.submit()
    bookingsite = response.read()

Et voici mon problème : comment puis-je utiliser la variable bookingsite, qui contient à nouveau un formulaire que je veux modifier et soumettre, comme une URL normale ? En mettant simplement

    br.open(bookingsite)

? ?? Ou existe-t-il un autre moyen de modifier et de soumettre la sortie (puis de soumettre à nouveau la sortie et de recevoir la nouvelle page de sortie) ?

0voto

Après votre première réponse response = br.submit() Sélectionnez le formulaire dans l'objet réponse :

response.select_form()

Une fois que vous avez modifié les valeurs des champs du formulaire, soumettez le formulaire :

response.submit()

P.S. Si vous automatisez des sites de réservation, il est fort probable qu'ils contiennent beaucoup de Javascript. Mechanize ne gère pas Javascript. Je vous suggère d'utiliser Requests à la place. Vous serez heureux de l'avoir fait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X