我的代码是网络抓取一些数据,以获得股票的基本信息,如价格到图书等。
我试图运行一个for循环,以删除额外的HTML代码,因为一些数据点是彩色的网站。
当我尝试运行for循环以从额外的HTML代码(在本例中为颜色代码)中剥离数据时,它只对颜色列表中的第一点(HTML代码)运行一次。
我的输出如下:
3.49
0.77
4.88
<span style="color:#aa0000;">15.71</span>
<span style="color:#aa0000;">8.07</span>
2.72
None
None
<span style="color:#aa0000;">10.19</span>
None
<span style="color:#aa0000;">7.21</span>
4.34
1.54
<span style="color:#aa0000;">10.75</span>
代码:
import time
import urllib.request
import urllib.parse
import pandas as pd
sp500short = ['a', 'aa', 'aapl', 'abbv', 'abc', 'abt', 'ace', 'aci', 'acn', 'act', 'adbe', 'adi', 'adm', 'adp']
#stock = 'a'
data = []
color_1 = '<span style="color:#008800;">'
color_2 = '<span style="color:#aa0000;">'
color_list = [color_1, color_2]
color_close = '</span>'
def finvizPBStats(stock):
pbr = 0
try:
sourceCode = urllib.request.urlopen('http://finviz.com/quote.ashx?t='+stock).read()
sourceCodeString = sourceCode.decode()
pbr = sourceCodeString.split('P/B</td><td width="8%" class="snapshot-td2" align="left"><b>')[1].split('</b></td>')[0]
for color in color_list:
if color not in pbr:
return pbr
elif color in pbr:
pbr = pbr.split(color)[1].split(color_close)[0]
pbr = float(pbr)
return pbr
except Exception as e:
if Exception:
pass
for stock in sp500short:
print(finvizPBStats(stock))
发布于 2016-12-19 14:40:37
我不明白为什么需要循环中的第一个if
条件。
for color in color_list:
if color not in pbr: # No need to have an if
return pbr
elif color in pbr:
pbr = pbr.split(color)[1].split(color_close)[0]
pbr = float(pbr)
return pbr
如果颜色不在列表中,请继续到下一个。如果不在列表中,则返回pbr
for color in color_list:
if color in pbr:
pbr = pbr.split(color)[1].split(color_close)[0]
pbr = float(pbr)
break # exit the loop
return pbr
https://stackoverflow.com/questions/41232069
复制相似问题