2012-06-13 74 views
0

我試圖用機械化抓住從這個網站紐約的大都會北方鐵路價格填充選項形式:http://as0.mta.info/mnr/fares/choosestation.cfmPython的機械化與通過的Javascript

的問題是,當你選擇第一個選項,網站使用JavaScript來填充您的可能目的地列表。我在python中編寫了等效的代碼,但我似乎無法完成所有工作。這是我到目前爲止有:

import mechanize 
import cookielib 
from bs4 import BeautifulSoup 

br = mechanize.Browser() 
br.set_handle_robots(False) 
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1)  Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 

br.open("http://as0.mta.info/mnr/fares/choosestation.cfm") 

br.select_form(name="form1") 
br.form.set_all_readonly(False) 

origin_control = br.form.find_control("orig_stat", type="select") 
origin_control_list = origin_control.items 
origin_control.value = [origin_control.items[0].name] 

destination_control_list = reFillList(0, origin_control_list) 

destination_control = br.form.find_control("dest_stat", type="select") 
destination_control.items = destination_control_list 
destination_control.value = [destination_control.items[0].name] 

response = br.submit() 
response_text = response.read() 
print response_text 

我知道我沒有給你的代碼的reFillList()方法,因爲它的長,但認爲它正確地創建mechanize.option對象的列表。 Python不會抱怨我的任何事情,但在提交時,我得到這個警報的HTML:

「兩條線之間的旅行的票價信息不在線提供,請聯繫我們的客戶信息中心511與代表交談以獲取更多信息。「

我在這裏錯過了什麼嗎?感謝所有的幫助!

回答

0

如果不試圖理解那個函數中瘋狂的邏輯,那麼不能真正做到。我建議使用js解決方案或全硒瀏覽器。