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