2

我的問題如下: 我正在嘗試編寫一個通過航空公司票務網站訂購流程的刮板。所以我想抓幾頁,這取決於頁面的結果之前(我希望你明白我的意思)。我至今現在:Python&機械化:如何在連續的頁面上刮取頁面?

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

這裏是我的問題:我如何使用變量bookingsite,這又包含了我要修改並提交形式,就像一個正常的網址是什麼?只需設定

br.open(bookingsite) 

???還是有另一種修改和提交輸出的方法(然後再次提交輸出並接收新的輸出頁面)?

+0

從'bookingsite'提取數據不應該是一個問題,但我不明白你爲什麼說'bookingsite'會包含一個「表單」。它應該只包含對你提交的表單的HTML響應(即'br.submit()')你能澄清一下嗎? – David

+0

嘿大衛,謝謝你的回覆!這裏是解釋:第一個網站包含一個表格,在這裏你可以輸入諸如出發和到達日期,機場等詳細信息,然後點擊提交,你會看到第二頁(預訂),你可以看到所有飛機在特定日期飛往您選擇的機場。在第二頁上,您需要選擇一個特定的航班(現在該選擇以另一種形式出現,在這種情況下,每個航班/飛機都有單選按鈕)。現在我需要選擇一個,然後再次提交第二個頁面以進入第三個頁面。 – julianschnell

+0

好的 - 那麼你應該可以調用'response.select_form()'並設置單選按鈕,接着是'response.submit()'。 – David

回答

0

後您的初始響應response = br.submit()選擇從響應對象的形式:

response.select_form() 

後你改變表單中的字段的值提交表單:

response.submit() 

附:如果您將預訂網站自動化,他們很可能會使用沉重的Javascript。機械化不處理Javascript。我建議使用請求。你會很高興你做到了。