Невозможно извлечь контент из элемента DOM с помощью $ 0 через BeautifulSoup - PullRequest
0 голосов
/ 08 ноября 2019

Вот сайт, на котором я собираюсь просмотреть количество отзывов The HTML code I am trying to scrape

Так что здесь я хочу извлечь число 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 - пустой тег

Я хочу пойти дальше в этом теге.

1 Ответ

0 голосов
/ 08 ноября 2019

Количество отзывов динамически извлекается из URL, который вы можете найти на вкладке сети. Вы можете просто извлечь из response.text с помощью регулярных выражений. Конечная точка является частью определенного обработчика ajax.

Вы можете найти множество инструкций API в одном из файлов js: https://thebodyshop-usa.ugc.bazaarvoice.com/static/6097redes-en_us/bvapi.js

Например:

image

Youесли вы действительно хотите, можете отследить множество jquery.

tl; dr;Я думаю, вам нужно только добавить 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]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...