#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