【问题标题】:Problems Scraping a Page With Beautiful Soup用漂亮的汤刮页面的问题
【发布时间】:2012-08-01 12:27:13
【问题描述】:

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

我正在尝试关注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。

提前致谢!

【问题讨论】:

  • 尝试使用 GET 而不是 POST。我能够使用 GET 使其工作。我只是将?ticker=<stock symbol> 附加到URL 并使用urllib2.urlopen() 提交。从那里,您可以使用 Beautiful Soup 解析结果。
  • 感谢您的帮助,大卫!它仍然对我不起作用。这是我的代码: request = "cboe.com/delayedquote/quotetable.aspx?ticker=IBM" response = urllib2.urlopen(request) htmltext = response.read() soup = BeautifulSoup(htmltext)
  • Hmmmmm...当我上周尝试时,它正在工作。这里一定有其他事情发生。今天我会尝试更多地玩这个。抱歉,如果我误导了你。
  • 谢谢大卫。感谢您的所有帮助。

标签: python-2.7 screen-scraping web-scraping beautifulsoup


【解决方案1】:

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

但是,下一个问题是我无法让 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"

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2013-11-08
    相关资源
    最近更新 更多