2012-08-03 54 views
2

我正在用美麗的湯來嘗試和刮一頁。用美麗的湯刮一頁的問題

我正在嘗試關注this教程。

我試圖提交股票代碼後,進入以下頁面的內容:

http://www.cboe.com/delayedquote/quotetable.aspx

的教程是在網頁的「GET」的方法,我的網頁是「POST 」。我想知道這是否是問題的一部分?

我想使用的第一個文本框 - 在那裏說:「對於延遲報價在下面輸入一個股票或指數符號」

相關代碼:

user_agent = 'Mozilla/5 (Solaris 10) Gecko' 
headers = { 'User-Agent' : user_agent } 

values = {'ctl00$ctl00$AllContent$ContentMain$ucQuoteTableCtl$txtSymbol' : 'IBM' } 
data = urllib.urlencode(values) 
request = urllib2.Request("http://www.cboe.com/delayedquote/quotetable.aspx", data, headers) 
response = urllib2.urlopen(request) 

通話沒有失敗,我沒有得到一套選項和價格返回給我,就像我交互式運行頁面時一樣。我有一堆亂碼的HTML。

在此先感謝!

+0

嘗試使用GET而不是POST。我能夠使用GET工作。我只是將'?ticker = <股票代碼>'附加到URL並使用'urllib2.urlopen()'提交。從那裏,你可以用美麗的湯來解析結果。 – David 2012-08-04 00:08:22

+0

謝謝你的幫助,大衛!它仍然不適合我。這裏是我的代碼:request =「http://www.cboe.com/delayedquote/quotetable.aspx?ticker=IBM」 response = urllib2.urlopen(request) htmltext = response.read() soup = BeautifulSoup (htmltext) – dorkboy 2012-08-06 17:32:47

+0

嗯......當我上週嘗試時,它正在工作。這裏一定還有別的事情要做。今天我會試着玩這個。如果我誤導了你,道歉。 – David 2012-08-06 18:00:09

回答

2

好的 - 我想我找到了問題(並找到了另一個)。我決定從'urllib2'切換到'機械化'。不幸的是,我一直在獲取數據時遇到問題。最後,我意識到有兩個'submit'按鈕,所以我在提交表單時嘗試傳遞name參數。只要得到正確的答覆,這就做到了這一點。

但是,接下來的問題是我無法讓BeautifulSoup解析HTML並找到必要的標籤。簡單的谷歌搜索顯示其他人也有類似的問題。所以,我放棄了BeautifulSoup,只是在HTML上做了一個基本的正則表達式。不如BeautifulSoup優雅,但有效。

好的 - 足夠的說話。這是我想出的:

import mechanize 
import re 

br = mechanize.Browser() 
url = 'http://www.cboe.com/delayedquote/quotetable.aspx' 
br.open(url) 
br.select_form(name='aspnetForm') 
br['ctl00$ctl00$AllContent$ContentMain$ucQuoteTableCtl$txtSymbol'] = 'IBM' 
# here's the key step that was causing the trouble - pass the name parameter 
# for the button when calling submit 
response = br.submit(name="ctl00$ctl00$AllContent$ContentMain$ucQuoteTableCtl$btnSubmit") 
data = response.read() 

match = re.search(r'Bid</font><span>&nbsp;\s*([0-9]{1,4}\.[0-9]{2})', data, re.MULTILINE|re.M|re.I) 
if match: 
    print match.group(1) 
else: 
    print "There was a problem retrieving the quote" 
+0

大衛 - 謝謝你的幫助! – dorkboy 2012-08-08 13:19:10