首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用美汤抓取页面的问题

用美汤抓取页面的问题
EN

Stack Overflow用户
提问于 2012-08-03 20:45:17
回答 1查看 852关注 0票数 2

我正在使用Beautiful Soup来尝试抓取一个页面。

我正在尝试学习this教程。

提交股票报价器符号后,我正在尝试获取以下页面的内容:

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

本教程适用于具有"GET“方法的页面,我的页面是"POST”。我想知道这是不是问题的一部分?

我想使用第一个文本框-在它下面写着:

“在下面输入延迟报价的股票或索引符号。”

相关代码:

代码语言:javascript
复制
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。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-07 07:29:20

好的--我想我找到了问题所在(并找到了另一个问题)。我决定从'urllib2‘切换到’机械化‘。不幸的是,我一直在获取数据时遇到问题。最后,我意识到有两个“提交”按钮,所以我尝试在提交表单时传递name参数。这就达到了获得正确响应的目的。

然而,下一个问题是我无法让BeautifulSoup解析HTML并找到所需的标记。在谷歌上简单搜索一下,就会发现其他人也有类似的问题。所以,我放弃了BeautifulSoup,只在HTML上做了一个基本的正则表达式。不像BeautifulSoup那么优雅,但很有效。

好了--说得够详细了。这是我想出来的:

代码语言:javascript
复制
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"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11796005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档