Вот сайт, на котором я собираюсь просмотреть количество отзывов
Так что здесь я хочу извлечь число 272, но оно возвращает None каждый раз. Я должен использовать BeautifulSoup. Я попытался -
sources = requests.get('https://www.thebodyshop.com/en-us/body/body-butter/olive-body-butter/p/p000016') soup = BeautifulSoup(sources.content, 'lxml') x = soup.find('div', {'class': 'columns five product-info'}).find('div') print(x)
output - пустой тег
Я хочу пойти дальше в этом теге.
Количество отзывов динамически извлекается из URL, который вы можете найти на вкладке сети. Вы можете просто извлечь из response.text с помощью регулярных выражений. Конечная точка является частью определенного обработчика ajax.
Вы можете найти множество инструкций API в одном из файлов js: https://thebodyshop-usa.ugc.bazaarvoice.com/static/6097redes-en_us/bvapi.js
https://thebodyshop-usa.ugc.bazaarvoice.com/static/6097redes-en_us/bvapi.js
Например:
Youесли вы действительно хотите, можете отследить множество jquery.
tl; dr;Я думаю, вам нужно только добавить product_id к константной строке.
product_id
import requests, re from bs4 import BeautifulSoup as bs p = re.compile(r'"numReviews":(\d+),') ids = ['p000627'] with requests.Session() as s: for product_id in ids: r = s.get(f'https://thebodyshop-usa.ugc.bazaarvoice.com/6097redes-en_us/{product_id}/reviews.djs?format=embeddedhtml') p = re.compile(r'"numReviews":(\d+),') print(int(p.findall(r.text)[0]))