Python 股价不受巨蟒的影响

Python 股价不受巨蟒的影响,python,web-scraping,Python,Web Scraping,使用本教程来获取股票价格:https://www.youtube.com/watch?v=f2h41uEi0xU 也有一些类似的问题,但我想知道如何修复当前的代码(出于学习目的),这些代码只是有一些解决方法 我知道有更好的方法可以做到这一点,但是这些视频有助于学习 一切正常,但它无法从网站检索价格!我也有他的密码。我正在使用PythonLauncher(Mac)2.7(也尝试了3.4)来运行Python程序 这是我的密码: import urllib import re symbolsli

使用本教程来获取股票价格:https://www.youtube.com/watch?v=f2h41uEi0xU

也有一些类似的问题,但我想知道如何修复当前的代码(出于学习目的),这些代码只是有一些解决方法

我知道有更好的方法可以做到这一点,但是这些视频有助于学习

一切正常,但它无法从网站检索价格!我也有他的密码。我正在使用PythonLauncher(Mac)2.7(也尝试了3.4)来运行Python程序

这是我的密码:

import urllib
import re

symbolslist = ["aapl", "spy", "goog", "nflx"]
i=0
while i<len(symbolslist):
    url = "http://finance.yahoo.com/q?s=" +symbolslist[i] +"&q1=1"
    htmlfile = urllib.urlopen(url)
    htmltext = htmlfile.read()
    regex = '<span id ="yfs_l84_'+symbolslist[i] +'">(.+?)</span>'
    pattern = re.compile(regex)
    price = re.findall(pattern,htmltext)
    print "the price of" , symbolslist[i], " is " ,price
    i+=1
导入urllib
进口稀土
符号列表=[“aapl”、“spy”、“goog”、“nflx”]
i=0
而我
  • 在正则表达式中,id后面有一个额外的空格。正确的正则表达式应该是: (请参见下面的示例代码)

  • 价格是一个列表,因此要获取价格,需要使用价格[0]

  • 示例代码:

    >>> regex = '<span id="yfs_l84_"yfs_l84_'+symbolslist[i] +'"">(.+?)</span>'
    >>> pattern = re.compile(regex)
    >>> price = re.findall(pattern, htmltext)
    >>> price
    [u'568.77']
    >>> price[0]
    u'568.77'
    
    >正则表达式='(.+?)'
    >>>pattern=re.compile(regex)
    >>>price=re.findall(模式,htmltext)
    >>>价格
    [u'568.77']
    >>>价格[0]
    u'568.77'
    
    我建议使用类似或的解析器为您解析。另外,我要做的另一个改变是不使用while循环。像我一样使用for循环。我知道您已经定义了I,并且正在增加它,所以for循环在这种情况下更有意义

    但是关于正则表达式的错误,Tamim是对的,在表达式的
    id=
    部分有一个额外的空间

    import urllib
    from bs4 import BeautifulSoup
    
    symbolslist = ["aapl", "spy", "goog", "nflx"]
    for i in range(0, len(symbolslist)):
        url = "http://finance.yahoo.com/q?s=" +symbolslist[i] +"&q1=1"
        htmlfile = urllib.urlopen(url)
        htmltext = htmlfile.read()
        bs = BeautifulSoup(htmltext)
        idTag = 'yfs_l84_' + symbolslist[i]
        price = bs.find('span', {'id': idTag}).text
        print "the price of" , symbolslist[i], " is " ,price
    

    不使用
    symbolslist[i]
    是的,空格是问题所在,还应使用price[0]。我使用goog而不是SYMBOLLIST[I]来快速检查它是否有效。可能最好使用代码,因为OP必须避免混淆。如果你要学习,不妨学习正确的方法,使用正则表达式解析html不是一个好主意。你也可以直接迭代SYMBOLLIST的元素,使用范围是多余的<代码>对于符号列表中的i
    ,则只需使用i而不是
    符号列表[i]