使用Python从网站获取非HTML数据

2 投票
3 回答
816 浏览
提问于 2025-04-16 08:43

我想把这个页面上的当前合约价格提取成一个字符串:http://www.cmegroup.com/trading/equity-index/us-index/e-mini-sandp500.html

我希望能找到一个适用于Python 2.6的解决方案。

用urllib获取页面的HTML很简单,但似乎这个价格是实时更新的,并不在HTML里面。我在Chrome中检查了这个元素,发现它是某个td类的东西。

但我不知道怎么用Python来获取这个数据。我试过beautifulsoup(但在Windows x64系统上搞了好几次都没能让tar.gz工作),然后又试了elementtree,但其实我对编程的兴趣主要在数据分析上。我不是网站设计师,也不想成为,所以这些东西对我来说有点陌生。这是实时价格的XML吗?

任何帮助都非常感谢。理想情况下,希望能有一个简单安装的模块和一些实际的代码,但所有的提示和建议我都很欢迎。

3 个回答

0

在不知道这个数字是从哪里来的情况下,很难给你具体的建议。这个数字可能是用php或者asp生成的,所以你需要先弄清楚这个数字是用哪种语言产生的。

1

如果你用像 firebug 这样的工具查看那个网站,你会看到它在进行一些AJAX请求。比如说,最开始的数据是通过一个AJAX请求填充的(至少对我来说是这样),这个请求的地址是:

http://www.cmegroup.com/CmeWS/md/MDServer/V1/Venue/G/Exchange/XCME/FOI/FUT/Product/ES?currentTime=1292780678142&contractCDs=,ESH1,ESM1,ESU1,ESZ1,ESH2,ESH1,ESM1,ESU1,ESZ1,ESH2

这个请求会返回一个JSON格式的响应,然后用JavaScript解析这个响应,把数据填到表格里。如果你想自己做这个,其实用urllib就能很简单地实现,然后用simplejson来解析响应。

另外,你应该仔细阅读这个 免责声明 你想做的事情可能不太符合这个网站的所有者的意愿。

2

看起来表格里的数字是通过Javascript填充的,所以单纯用urllib或者其他库去获取HTML是不够的,因为这些库不会运行Javascript。你需要用像PyQt这样的库来模拟浏览器渲染页面/执行Javascript,以便填充数字,然后再抓取输出的HTML。

可以参考这篇关于使用PyQt的博客文章: http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/链接文本

撰写回答