Для цикла выводится только первое значение

#python #for-loop

Вопрос:

Я пытаюсь очистить данные о запасах в Интернете, используя цикл for в списке из пяти акций. Проблема в том, что только первое значение возвращается пять раз. Я пробовал добавлять в список, но это все равно не работает, хотя очевидно, что я добавляю неправильно. На веб-сайте я хочу получить данные об операционных денежных средствах, которые, например, представлены в виде 14B или 1B, поэтому я удалил B и умножил это число, чтобы получить исходное значение. Вот мой код:

 import requests
import yfinance as yf
import pandas as pd
from bs4 import BeautifulSoup
headers = {'User Agent':'Mozilla/5.0'}
stocks = ['AMC','AMD','PFE','AAPL', 'NVDA']
finished_list = []
for stock in stocks:
    url = f'https://www.marketwatch.com/investing/stock/{stock}/financials/cash-flow'
    res = requests.get(url)
    soup = BeautifulSoup(res.content, 'lxml')
    operating_cash = soup.findAll('div', class_ = "cell__content")[134].text
    finished_list.append(operating_cash)
    if 'B' in operating_cash:
        cash1 = operating_cash.replace('B','')
        if '(' in cash1:
            cash2 = cash1.replace('(','-')
        if ')' in cash2:
            cash3 = cash2.replace(')','')
            cash3 = float(cash3)
            print(cash3*1000000000)
        else:
            cash1 = float(cash1)
            print(cash1 * 1000000000)
 

Текущий выход составляет -1060000000.0 пять раз подряд, что является правильным значением для операционных денежных средств для AMC, но не для остальных четырех. Заранее спасибо всем, кто может мне помочь.

Ответ №1:

Вам не нужно использовать if условия для str.replace() . Вместо этого сделайте все ваши замены в одной строке, вот так:

 for stock in stocks:
    url = f'https://www.marketwatch.com/investing/stock/{stock}/financials/cash-flow'
    res = requests.get(url)
    soup = BeautifulSoup(res.content, 'lxml')
    operating_cash = soup.findAll('div', class_ = "cell__content")[134].text
    finished_list.append(operating_cash)
    cash = float(operating_cash.replace('B','').replace('(','-').replace(')',''))
    print(cash*1000000000)

-1060000000.0
1070000000.0000001
14400000000.0
80670000000.0
5820000000.0