Парсер выдает не все значения
Пишу парсер, он должен перебрать 5 стр. по 50 знач. и на выходе 250 знач., но фактически выдает 200, т.е. перебирает 4 стр. В чем проблема?
import requests
from bs4 import BeautifulSoup
import re
data = []
for p in range(1, 6):
url = f"https://www.kinopoisk.ru/lists/movies/top250/?page={p}"
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
films = soup.findAll('div', class_='styles_root__ti07r')
for film in films:
meta_inf = film.find('span', class_='desktop-list-main-info_secondaryText__M_aus').text.replace("\xa0мин.", "")
meta_inf2 = film.find('span', class_= 'desktop-list-main-info_truncatedText__IMQRP').text.replace("\xa0.", "")
link = "https://www.kinopoisk.ru" + film.find('a', class_='base-movie-main-info_link__YwtP1').get('href')
rus_name = film.find('span', class_='styles_mainTitle__IFQyZ styles_activeMovieTittle__kJdJj').text
year = re.findall(r'\d+', meta_inf)[0]
duration = re.findall(r'\d+', meta_inf)[1]
country = meta_inf2.partition(' •')[0]
director = meta_inf2.partition('Режиссёр: ')[2]
genre = meta_inf2.partition(' • ')[2].partition('Режиссёр:')[0][:-2]
roles = soup.findAll('span', class_='desktop-list-main-info_truncatedText__IMQRP')[1].text.partition('В ролях: ')[2]
raiting = soup.find('span', class_='styles_kinopoiskValuePositive__vOb2E styles_kinopoiskValue__9qXjg').text
data.append([rus_name, link, year, duration, director, country, genre, roles, raiting])
len(data)
200
Ответы (1 шт):
Автор решения: Сергей Ш
→ Ссылка
Вот что у меня получилось
<Response [200]> https://www.kinopoisk.ru/lists/movies/top250/?page=1
<Response [200]> https://www.kinopoisk.ru/lists/movies/top250/?page=2
<Response [200]> https://www.kinopoisk.ru/lists/movies/top250/?page=3
<Response [200]> https://www.kinopoisk.ru/showcaptcha?cc=1&retpath=https%3A//www.kinopoisk.ru/lists/movies/top250%3Fpage%3D4_6b0aaf665bed002528936197ae3b5408&t=2/1653573994/d41d8cd98f00b204e9800998ecf8427e&u=cb13d61f-f70af52f-3a34a320-ab124f50&s=4ee319e71f2556c5685453195f87aaa9
<Response [200]> https://www.kinopoisk.ru/showcaptcha?cc=1&retpath=https%3A//www.kinopoisk.ru/lists/movies/top250%3Fpage%3D5_a7c234fddafe29f24f0b8b6b270221c2&t=2/1653573994/d41d8cd98f00b204e9800998ecf8427e&u=2b5010a-dddfcdd7-75aa59c7-e05a14b6&s=62ffa953a28b0c4625238a2eb3fe3a5b
последние два запроса капча, видимо поняли, что вы бот
как проверить?
for p in range(1, 6):
url = f"https://www.kinopoisk.ru/lists/movies/top250/?page={p}"
page = requests.get(url)
print(page, page.url)