в то время как текст не в супе: - не поднимая этот текст в супе, даже если он существует - PullRequest
0 голосов
/ 09 июня 2018

Написание скрипта для проверки, загружен ли продукт на сайт.

import requests
import time
from bs4 import BeautifulSoup

r = requests.get('https://www.off---white.com/en/GB/section/new-arrivals.js')
soup = BeautifulSoup(r.text, 'html.parser')
text = '3.0'

while text not in soup:
    print('not found')
    r = requests.get('https://www.off---white.com/en/GB/section/new-arrivals.js')
    soup = BeautifulSoup(r.text, 'html.parser')
    time.sleep(5)

Когда я печатаю суп, я вижу, что там «3.0».Но когда я запускаю скрипт, он не распознает, что там есть «3.0».Что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Если вы хотите только проверить, присутствует ли текст в исходном коде, вам не нужно 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__))
0 голосов
/ 09 июня 2018

Привет, у меня есть 3 вещи, которые вы можете попробовать:

1: убедитесь, что суп - строка, выполнив:

while text not in str(soup):

2: попробуйте переставить цикл while в:

while not text in soup:

3: если суп - это массив, а не строка, вы можете сделать:

while soup.index(text) == -1:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...