Top.Mail.Ru
Ответы

Парсинг сайтов. Python

Добрый вечер, пытаюсь реализовать парсер для сайта https://5ka.ru/special_offers , чтобы по итогу получить полный список товаров с сайта. По переходу на сайт вам доступен каталог первых 20 или 30, не суть важно, определенного количества товаров. После надо подгружать следующую группу через кнопку 'Загрузить еще', но проблема в том что после ее нажатия url страницы не меняется. Собственно вопрос, как можно реализовать, чтобы все страницы через эту кнопку сразу загружались. Слышал что-то о библиотеке Silenium.
Но это только первая проблема, вторая заключается в том что парсер подгружает только половину из доступных в первом листе товаров, если запустите код, то увидите, что последним элементом будет Айва 1кг, хотя там дальше еще 10 или 15 позиций.
Вот код:

12345678
 import requests 
import lxml 
from bs4 import BeautifulSoup 
url = 'https://5ka.ru/special_offers' 
html_text = requests.get(url).text 
html_text_lxml = BeautifulSoup(html_text, 'lxml')
a = html_text_lxml.find_all('div','product-card item') 
print(a) 


Заранее спасибо!

По дате
По рейтингу
Аватар пользователя
Ученик

селениум это фреймворк автоматизации тестирования и он не нужен для парсинга.
достаточно изучить запросы и ответы сайта при переходах по кнопкам, и далее имитировать их путём вызова через любой доступный вам REST фреймворк. делаете http вызовы, парсите ответы - профит.

Аватар пользователя
Ученик

Спасибо! Только что опубликовал вторую проблему дополнив вопрос, можете что-то подсказать?

Аватар пользователя
Ученик

Немного не понимаю о чем вы. Какой ответ сервера?

Аватар пользователя
Ученик

У вас последним выдало Дск Картофель мытый при запуске моего кода или вы сами написали?

Аватар пользователя
Ученик

Если вы про код страницы, по которой код, что я написал переходит по get запросу, то да. Там видно все позиции, но при запуске кода отображается только часть, и последняя айва, хотя должно быть как у вас, последним элементом картошка

Аватар пользователя
Ученик

Понял! Спасибо

Аватар пользователя
Ученик

Да, возвращаясь к вопросу о дозагрузке товаров, не могли бы вы показать мне как можно реализовать то что вы описали?

Аватар пользователя
Ученик

По поводу того что парсер не загружал все элементы с сайта я разобрался, код работает отлично, изначально я запускал программу в VS code, после подумал что что-то не так с данным редактором и перешел в PyCharm, там все работает замечательно. Почему-то VS code не дает загрузить весь текст, может быть ограничение по символам. Это ограничение по символам можно как настроить?

Аватар пользователя
Ученик

Попробовал поработать с вашей ссылкой, насколько я понял там по умолчанию page = 1, то есть это первая страница, 2ая это значит что подгружается после первого нажатия 'Загрузить еще', 3ая это после второго нажатия 'Загрузить еще' и т.д, я правильно понял?

Аватар пользователя
Мастер

Можно еще попробовать библиотеку requests_html она позволяет работать с JS. То есть к примеру можно прокрутить страницу или нажать на какой-то элемент (кнопку). С ее помощью после загрузки страницы вы можете выполнить свой JS код.



Видео по теме