【问题标题】:Beautiful Soup Out of Index索引中的美丽汤
【发布时间】:2015-12-11 22:09:47
【问题描述】:

我正在尝试创建一个简单的程序,当我输入谷歌金融地址时打印股票价格。

我目前使用的代码如下。

import requests
import bs4
def pricechecker(url):
    r = requests.get(url)
    soup = bs4.BeautifulSoup(r.text, 'html5lib')
    print (soup.select('span.unchanged')[0].text)

当我运行代码时,我一直使用http://www.google.com/finance?q=NASDAQ%3AAAPL&ei=4UJrVomFNZGje7y-pJAP 作为参数。在运行代码时,它指出列表索引超出范围。我使用 firebug 来获取我的代码的 soup.select 部分的 CSS。

非常感谢任何帮助,因为我是编程新手并希望纠正我的错误。

最好的,

猎人

【问题讨论】:

  • 提示:print(soup.select('span.unchanged')) 看结果
  • 我在尝试对其进行索引之前尝试了一下,它只是返回并为空列表。我不知道为什么会这样。
  • 那么,当您索引一个空列表时,您会期待什么?
  • 我想让它打印股票价格
  • 你必须从网站上刮下来吗?有更好的方法来获取股票价格。我的猜测是,有一个脚本可以运行以填充您要抓取的字段。因此,由于您在浏览器之外请求 html,因此 javascript 无法填写。

标签: python-3.x beautifulsoup


【解决方案1】:

快速检查表明您从此请求中获得的原始 html 不会在其中任何地方“未更改”:尝试运行

curl http://www.google.com/finance?q=NASDAQ%3AAAPL&ei=4UJrVomFNZGje7y-pJAP | grep "unchanged"

不会有结果。

或者如果你不喜欢命令行,你可以在python中试试这个:

r = requests.get(url)
print("unchanged" in r.text)  # will be False

不会有匹配项。这是因为“未更改”值仅在页面的 javascript 将数据加载到同样在 javascript 中生成的 <span class="unchanged"></span> 标记时才会显示。

您可以使用googlefinance Python library 获取此数据。当然首先安装:pip install googlefinance。那么

from googlefinance import getQuotes
aapl = getQuotes('AAPL')
print(aapl)  # provides a bunch of info in a list including...
last_price = aapl[0]['LastTradePrice']

last_price 是一个字符串,所以要转换为浮点数,float(aapl[0]['LastTradePrice'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多