2

私の問題は次のとおりです。航空券のWebサイトの注文プロセスを実行するスクレーパーを作成しようとしています。ですから、前のページの結果に依存するいくつかのページを削りたいと思います(私が言っていることを理解していただければ幸いです)。私は今これまでのところです:

    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()

そして、ここに私の問題があります。通常のURLと同じように、変更して送信したいフォームが再び含まれている可変予約サイトをどのように使用できますか?設定するだけで

    br.open(bookingsite)

??? または、出力を変更して送信する(そして、出力を再度送信して新しい出力ページを受け取る)別の方法はありますか?

4

1 に答える 1

0

最初の応答の後response = br.submit()応答オブジェクトからフォームを選択します。

response.select_form()

フォーム内のフィールドの値を変更したら、フォームを送信します。

response.submit()

PS 予約サイトを自動化している場合は、Javascript が重い可能性が高いです。Mechanize は Javascript を処理しません。代わりにリクエストを使用することをお勧めします。あなたは幸せになるでしょう。

于 2013-11-08T14:50:57.370 に答える