@stronks
Ламер

Можно как-то сократить метод replace()?

Пишу VK бота, который парсит данные. Но из-за ограничений VK на длину строки в кнопках приходится сокращать получаемые данные методом replace .
Вот пример:
def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    bolshaya_corobka = soup.find('div', class_='upcoming-matches')
    matches1 = []
    malencaya_corobka1 = bolshaya_corobka.find('div', class_="match-day")
    match1 = malencaya_corobka1.find_all('div', class_="upcoming-match standard-box")
    for i in match1:
        td_bo1 = i.find('td', class_="star-cell")
        if td_bo1:
            td_bo1.decompose()
        span1 = i.find('span')
        span1.decompose()
        matches1.append(i.find('table', class_="table").get_text().replace('\n\n\n', ' ').replace('\n', ' ').replace('.', ''))
    print(matches1)

Здесь представлена малая часть замен, в коде занимает 880 символов.
Видел, что можно с помощью словаря в строке заменить, но мне нужна конкретно работа со списком, есть какие-то варианты решения?
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 3
SoreMix
@SoreMix Куратор тега Python
yellow
По-моему как-то криво данные из таблицы берутся. Неужели там нет отдельного поля с названием того, что нужно?
Ответ написан
Комментировать
ScriptKiddo
@ScriptKiddo
Как вариант - использовать такую конструкцию
source = 'St\n\n\nri\nng test\n123 ...  H.el.lo'

print(f'Before: {source}')

symbols_to_replace = {
    '\n\n\n': ' ',
    '\n': ' ',
    '.': '',
}

for search, replace in symbols_to_replace.items():
    source = source.replace(search, replace)

print(f'After: {source}')


Result:

Before: St


ri
ng test
123 ...  H.el.lo
After: St ri ng test 123   Hello
Ответ написан
Комментировать
@Drill
from re import sub
matches1.append(sub('\n+', ' ', i.find('table', class_="table").get_text()).replace('.', ''))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы