Как мне удалить некоторый текст из вывода «get_text()» в BeautifulSoup

#python #beautifulsoup #python-requests

#python #beautifulsoup #python-запросы

Вопрос:

Я создаю программу очистки веб-страниц, чтобы получать информацию о настроениях розничной торговли с IG Markets.

Вывод, который я хотел бы отобразить в консоли, является:

      "EUR/USD: 57% of clients accounts are short on this market".
  

Вывод, который я получаю прямо сейчас, это:

      "EUR/USD:  57% of client accounts are short on this market The percentage of IG client    
      accounts with positions in this market that are currently long or short. Calculated  
      to the nearest 1%."
  

Как мне удалить этот текст:

         "The percentage of IG client accounts with positions in this market that are  
         currently long or short. Calculated to the nearest 1%."
  

Спасибо.

Вот код:

 import bs4, requests

def getIGsentiment(pairUrl):
    res = requests.get(pairUrl)
    res.raise_for_status()

    soup = bs4.BeautifulSoup(res.text, 'html.parser')
    elems = soup.select('.price-ticket__sentiment')
    return elems[0].get_text(" ", strip = True)

retail_positions = getIGsentiment('https://www.ig.com/us/forex/markets-forex/eur-usd')
print('EUR/USD:  '   retail_positions)
  

Ответ №1:

Для этого вы можете использовать регулярное выражение (regex) :

 >>> import re
>>> print('EUR/USD:  '   re.match('^.*on this market',retail_positions).group())
EUR/USD:  57% of client accounts are short on this market
  

Вы выражаете шаблон поиска ( ^.*on this market ) и re.match() вернет re.Match объект, и вы можете получить совпадение с group() функцией.

Этот шаблон поиска состоит из 3 частей :

  • ^ сопоставьте начало строки
  • .* означает соответствие нулевому или более ( * ) экземпляру любого символа ( . )
  • on this market буквально сопоставьте эту строку

Регулярные выражения широко используются и поддерживаются, но остерегайтесь некоторых вариантов, Python, похоже, не поддерживает [[:digit:]] класс character…

Ответ №2:

Если ваша строка изменяется, но заглавные буквы нет, вы можете просто создать цикл for для просмотра 7-го верхнего символа и разделить строку. В данном случае это буква «T».

Что-то вроде этого:

 phrase = "EUR/USD:  57 % of client accounts are short on this market The percentage of 
IG client accounts with positions in this market that are currently long or short. 
Calculated to the nearest 1 % ."

upperchars = []
for char in phrase:
    if char.isupper():
        upperchars.append(char)

final = phrase.split(upperchars[6])[0]
print(final)
  

Результатом будет:

EUR / USD: 57 % клиентских счетов не хватает на этом рынке