2012-08-03 55 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