Почему strip() не удаляет пробельные символы?
Метод strip() почему-то не удаляет символы перевода строки '\n'.
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
' (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
url = 'https://app.superboss9.com/api/v1/pages/good_start?ln=en&location=eu'
res = requests.get(url, headers=headers)
d = res.json()["data"]
txt1 = d["title"] + d["content"]
print(type(txt1)) # <class 'str'>
soup = BeautifulSoup(txt1, 'html.parser')
li = []
for el in soup.h3.next_siblings:
s = el.text
s = s.strip('\n')
li.append(s)
print(repr(s))
Если написать strip(''), то есть без указания параметра, то он работает и удаляет все пробельные символы.

Ответы (2 шт):
Метод strip() удаляет только начальные и конечные символы в строке. При этом количество символов не важно - удалит все.
Как вариант, можно перечислить все необходимые символы для удаления в качестве аргумента, но опять же удалит только то, что находится в начале и в конце строки :
s.strip('\n\r\t')
Если хотите убрать символ внутри строки воспользуйтесь replace():
s.replace('\n', '')
Метод str.strip() без аргумента удаляет ведущие и завершающие символы, соответствующие string.whitespace:
import string
for c in string.whitespace:
print(f'{ascii(c):<6}, код {ord(c):02d}')
' ' , код 32
'\t' , код 09
'\n' , код 10
'\r' , код 13
'\x0b', код 11
'\x0c', код 12
Когда str.strip() встречает в строке символ, который отсутствует в заданной последовательности на удаление, он прекращает дальнейшую чистку с той стороны, где встретился такой символ.
Так, например, есть строка \r\n\t+\r.
Вариант вызова .strip() видит символы \r слева и справа - они есть в string.whitespace - удаляет. Далее видит \n слева и + справа. \n есть в string.whitespace - удаляет. + нет, поэтому справа больше чистить нечего. Затем \t слева - удалить. И снова видит + слева, дальше
не идет.
Вариант вызова .strip('\n') для чистки оперирует только символом \n. Он видит символы \r слева и справа - их нет в аргументе и метод завершает работу, так и не добравшись до \n.
Дополнительно. Существуют еще методы .lstrip() и .rstrip(), которые чистят строку только слева и только справа соответственно.