Парсинг данных с "+" и "-"

Парсер неправильно выводит данные за день, содержащие "+" и "-". В чём может быть проблема?

Вот мои код:

import requests
from bs4 import BeautifulSoup

url = 'https://smart-lab.ru/q/portfolio/jokerv4/8481/'
sourse = requests.get(url)
new_news = []
soup = BeautifulSoup(sourse.text, 'html.parser')
news = soup.find('table', {'csv-download-data': 'russian_shares'})
news = news.findAll('tr')
n = ""
for i in range(len(news) - 1):
    if news[i].find('a') is not None:
        if news[i + 1].find('td', {'class': 'up'}) is None:
            n = news[i + 1].find('td', {'class': 'down'}).text
        if news[i + 1].find('td', {'class': 'down'}) is None:
            n = news[i + 1].find('td', {'class': 'up'}).text
        print(n)
        w = news[i + 1].find('a').text + ":" + news[i + 1].find('td', {'class': 'price'}).text + n
        # может быть down или up исправить это
        w = w.split()
        w = ''.join(w)
        new_news.append(w)
for i in range(len(new_news)):
    print(new_news[i])

Ответы (1 шт):

Автор решения: Namerek

Не знаю Вашей конечной цели, но возможно такой способ Вам подойдет:

# Если не установлены pip install pandas lxml openpyxl

import pandas as pd

url = 'https://smart-lab.ru/q/portfolio/jokerv4/8481/'
pd.read_html(url)[1][['Название', 'Прибыль ₽', 'Изм, %']].to_excel('test.xlsx', index=False)

На выходе дает:

введите сюда описание изображения

UPD Если следовать логике Вашего способа вывода данных то что-то вроде этого

url = 'https://smart-lab.ru/q/portfolio/jokerv4/8481/'
df = pd.read_html(url)[1][['Название', 'Прибыль ₽', 'Изм, %']]

for row in df.iloc:
    print(*row)
    title, profit, diff = row
    # some actions with variables
→ Ссылка