for loop trouble,只运行列表的第一个实例

时间:2016-12-19 22:32:40

标签: python

我的代码是通过网络抓取一些数据来获取库存基本信息,例如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))

1 个答案:

答案 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