Если вы хотите только проверить, присутствует ли текст в исходном коде, вам не нужно BeautifulSoup
.Вы можете напрямую проверить это, используя requests
.
r = requests.get('https://www.off---white.com/en/GB/section/new-arrivals.js')
text = '3.0'
while text not in r.text:
print('not found')
r = requests.get('https://www.off---white.com/en/GB/section/new-arrivals.js')
time.sleep(5)
Если вам нужно использовать BeautifulSoup
по любым другим причинам, вы можете использовать любую из следующих:
while text not in soup.text
while text not in soup.get_text()
while text not in str(soup)
Теперь, если вам интересно, почему while text not in soup
не работает,Прочитайте следующее:
Магический метод , который определяет поведение x <strong>in</strong> y
, равно __contains__(self, item)
.Если вы посмотрите на исходный код BeautifulSoup.__contains__
, он задается следующим образом:
def __contains__(self, x):
return x in self.contents
Итак, используя while text not in soup
, вы проверяете, является ли text
элементомсписка элементов (Tag
или NavigableString
), возвращаемых .contents
.Поскольку 3.0
- это некоторый текст внутри тега, он не доступен напрямую в этом списке и, следовательно, '3.0' in soup
возвращает False
.
Чтобы проверить исходный код, вы можете перейти набиблиотеки установлены на вашем компьютере и проверьте код, или используйте следующее:
import inspect
from bs4 import BeautifulSoup
print(inspect.getsource(BeautifulSoup.__contains__))