我的代码是通过网络抓取一些数据来获取库存基本信息,例如Price to Book等。
我正在尝试运行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))
答案 0 :(得分:3)
我不明白为什么你需要循环中的第一个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