2013-04-03 77 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"