python-2.7 - 用 BeautifulSoup 刮一页的问题

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

我正在使用 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。

提前致谢!

最佳答案

好的 - 我想我已经解决了问题(并且发现了另一个问题)。我决定从“urllib2”切换到“mechanize”。不幸的是,我在获取数据时一直遇到问题。最后,我意识到有两个“提交”按钮,因此我尝试在提交表单时传递名称参数。就获得正确响应而言,这确实有效。

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

关于python-2.7 - 用 BeautifulSoup 刮一页的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796005/

相关文章:

python-2.7 - Python zipfile 模块错误地认为我有一个跨越多个磁盘的 zipfile,引发 BadZipfile 错误

python-2.7 - 非凸优化器

c# - 屏幕抓取执行 ajax 请求的页面

python - 尝试通过 Selenium 和 Python 使用 ChromeDriver Chrome 进行抓取时,地址栏显示数据 :,

ruby - 使用 Anemone 和 nokogiri 进行屏幕抓取需要帮助

google-sheets - IMPORTDATA 函数 Google 表格

r - 使用 RStudio Chromote 获取页面生成的 XHR 请求的响应正文的正确方法

django - 您正在尝试在没有默认值的情况下将不可空字段 'id' 添加到 contact_info

python - 如何重写不在类中的核心Python函数

python - BeautifulSoup 标签的出现顺序