Получаю пустой массив из bs4

Пытаюсь спарсить данные из сайта, но прилетает пустой массив, это какая то защита или не пойму. Код приложен

import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
import json

url = 'https://tofunft.com/ru/collection/iguverse-nft/activities?category=listing'
ua = UserAgent()
headers = {'User-Agent': ua.chrome}

responce = requests.get(url, headers=headers)

soup = BeautifulSoup(responce.text, "html.parser")
find_data = soup.find_all('div', __class="chakra-stack")

print(find_data)

Ответы (1 шт):

Автор решения: DiMithras

Защита на сайте есть, но такая же как и эти ваши NFT, бесполезная. Можешь открыть страницу в Tor, чтобы грузилась помедленнее, и посмотреть что там происходит.

Да, это защита от cloudflare, которая проверяет cookies и JS. Но на любую старуху бывает проруха, тем более что подобной защите уже много лет, соответственно есть и решения.

Cloudscraper весит всего 98 kB, не грузит ресурсы как Selenium, который вместе с нужными данными подгрузит ещё кучу всякого непотребства, довольно лёгок в использовании. По сути надстройка над requests и requests_toolbelt.

import json
import cloudscraper
s = cloudscraper.create_scraper(delay=10,   browser={'custom': 'ScraperBot/1.0',})
url = r'https://tofunft.com/_next/data/U1Z9uAYluX_zw7t7_5z3D/ru/collection/iguverse-nft/activities.json'
params = {
    'category':'listing',
    'slug':'iguverse-nft'
}
# params['page'] = 2
r = s.get(url, params=params)
j = json.loads(r.content)
for i in j['pageProps']['data']['searchResp']['data']:
    print(i['nft']['meta']['name'])
Output:
Office Rat
Warrior
Dumka
Chester
King
King
Bonya
Swiper Boy
Laemanctus White
Diego
Diego
Ciffer
Pink Floyd
Laemanctus White
Swiper Boy
Kitpy
Diego
Red Bull
Leri
Cat

Защита тут слабая, даже headers не требуется, насиловать сайт можно сколько угодно.
А это значит, что собираешь из необходимые тебе данные, засовываешь всё в цикл, где инкрементируешь page и собираешь весь этот бардак в DataFrame. Как это делать можно подсмотреть в другом моём ответе:
Не могу распарсить динамический сайт, если точнее при переходе на страницу с json, дает ошибку 405

Совет

Пытаюсь спарсить данные из сайта, но прилетает пустой массив, это какая то защита или не пойму

По твоему коду, у тебя не просто пустой массив. Посмотри что тебе выдаёт responce.status_code (response через S пишется).

Божечки, да там же 403, понятное дело у тебя массив пустой.

→ Ссылка