首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于循环故障,只在列表的第一个实例中运行。

对于循环故障,只在列表的第一个实例中运行。
EN

Stack Overflow用户
提问于 2016-12-19 22:32:40
回答 1查看 50关注 0票数 0

我的代码是网络抓取一些数据,以获得股票的基本信息,如价格到图书等。

我试图运行一个for循环,以删除额外的HTML代码,因为一些数据点是彩色的网站。

当我尝试运行for循环以从额外的HTML代码(在本例中为颜色代码)中剥离数据时,它只对颜色列表中的第一点(HTML代码)运行一次。

我的输出如下:

代码语言:javascript
运行
复制
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>

代码:

代码语言:javascript
运行
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-19 22:40:37

我不明白为什么需要循环中的第一个if条件。

代码语言:javascript
运行
复制
   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

代码语言:javascript
运行
复制
   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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41232069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档