2013-04-03 74 views
3

我正在使用此網站(http://gasbuddy.com/)收集汽油價格。基本上,我想編寫一個python腳本,它將在頁面頂部的搜索框中輸入郵政編碼,然後將結果從下一頁中刪除。我被困在第一步,即將我想要的郵政編碼輸入到表單中。這是我到目前爲止有:使用Python進行網頁搜索

from mechanize import Browser 
import urllib2 

br = Browser() 
baseURL = "http://www.gasbuddy.com/" 
br.open(baseURL) 

zipcode = "20010" 

forms = [f for f in br.forms()] 
print forms[0] 
control = forms[0].find_control("ctl00$Content$GBZS$txtZip") 
forms[0]["ctl00$Content$GBZS$txtZip"] = "20010" 
br.form = forms[0] 
page = br.submit() 
content = page.read() 
br.geturl() 

不幸的是,當我提交表單,br.geturl()告訴我,我還沒有得到來,我想(網址看起來應該像「http://www.washingtondcgasprices.com/index.aspx?area=Washington%20-%20NE&area=Washington%20-%20NW&area=Washington%20-%20SE&area=Washington%20-%20SW頁面「)

如果您有任何指導,我會感激。謝謝!

+0

你可以給我們一個關於如何通過瀏覽該網站到達該頁面的例子嗎? –

+0

如果您轉到「搜索當地天然氣價格」下的搜索框並輸入一個郵政編碼,如「20010」,然後點擊搜索按鈕,它會帶您到任何您指定的郵政編碼的天然氣價格頁面。 – aesir

+0

也許嘗試硒,讓你真正看到它出錯的地方?我多次遇到此問題,有時網站會檢測到您不是真人,並顯示驗證碼。或類似的東西 – nnaelle

回答

1

你可以用硒做到這一點:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

baseURL = "http://www.gasbuddy.com/" 

browser = webdriver.Firefox() 
zipcode = "20010" 

browser.get(baseURL) 
elem = browser.find_element_by_id("ctl00_Content_GBZS_txtZip").send_keys(zipcode) 
elem = browser.find_element_by_id("ctl00_Content_GBZS_btnSearch").click() 

如果你想堅持到機械化,你可能需要調整您的瀏覽器了一下。但我仍然懷疑這是在那裏殺死你的JavaScript。那麼解決方案將是"read the javascript yourself and simulate with mechanize what it would be doing"