如何跳过循环中的值,而不在python下降值

问题描述 投票:1回答:4

我在网报废工作,在Python编码和我确定它几乎所有提交的数据。我创建dataframes相关分析。不过我有在一些网络页面的报废部分“无”值的问题。

在我工作的最后一步,我就废与环中的价格值<span>部分,如下图所示。

<span class="abababa">100,00$</span>

这里是我的for循环,我使用.text<span>部分逃脱:

    price=[]
    for i in range(4):
        for j in range(100):
            pr=data[i][j].find('span', class_ = 'abababa')
            price.append(pr.text)
    dPP=pd.DataFrame(price, columns=['Price'])

注:有4个主要的Web页,每页有至少100价值废钢价格在上面的代码中。这就是为什么我用两个嵌套的for循环。

不存在任何问题,如果有在上面的代码100点的值没有“无”的值。然而,在课程的现实世界中也有对没有任何<span>部分价格部分的一些“无”的值。

像下面一个:

    <span class="abababa">100,00$</span>
    <span class="abababa">48,00$</span>
    None
    <span class="abababa">100,00$</span>

我试图找到与if语句,从“无”的值,但在这种情况下,下面的代码下降到“无”值指标和数据帧我越来越混乱逃跑的解决方案。例如,我有4个主要的网页和100个值,我期望有一个4×100 = 400行单个列数据帧。如果我总共有10“无”的价值观,我的数据帧将在总390行。

    price=[]
    for i in range(4):
        for j in range(100):
            pr=data[i][j].find('span', class_ = 'abababa')
            if pr == (None):
                continue
            price.append(pr.text)
    dPP=pd.DataFrame(price, columns=['Price'])

总之,我没有做它没有下探那些“无”值工作。 .text也没有任何“无”值工作。我得到'NoneType' object has no attribute 'text'错误。

你可以帮帮我吗?

python for-loop if-statement web-scraping beautifulsoup
4个回答
1
投票

你可以简单地添加一个虚拟值,以价格留住关键 -

price=[]
for i in range(4):
    for j in range(100):
        pr=data[i][j].find('span', class_ = 'abababa')
        if pr == (None):
            price.append('dummy-string-when-none-occurs')
            continue
        price.append(pr.text)
dPP=pd.DataFrame(price, columns=['Price'])

如果data是一个数据帧一个更好的方法将使用本地大熊猫。然后, -

price = data['enter-html-col']\
           .apply(lambda x: x.find('span', class_ = 'abababa') if x is not None else x)

0
投票

您只需将一个空字符串,当prNone

price=[]
for i in range(4):
    for j in range(100):
        pr=data[i][j].find('span', class_ = 'abababa')
        if pr is None:
             price.append("")
             continue
        price.append(pr.text)
dPP=pd.DataFrame(price, columns=['Price'])

0
投票

您可以尝试在代码中的以下修改:

price=[]
for i in range(4):
    for j in range(100):
        pr=data[i][j].find('span', class_ = 'abababa')
        if pr == (None):
            price.append(None)
            continue
        price.append(pr.text)
dPP=pd.DataFrame(price, columns=['Price'])

0
投票

你可以只使用一个if语句?

for j in range(100):
    if data[i][j] == None:
        price.append(data[i][j])
    else:
        pr=data[i][j].find('span', class_ = 'abababa')
        price.append(pr.text)
© www.soinside.com 2019 - 2024. All rights reserved.