@pareylook
CG artist

Как осуществить подгрузку страницы при парсинге изображений c помощью Grab?

Добрый день. Возникла задача закачивать подборки (board) с сайта pinterest

Для этой задачи я использовал библиотеку Grab.

Сам парсер выглядит следующим образом

from grab import Grab
g = Grab()
g.go('https://www.pinterest.com/einaryoris/topology/')
count = 0
for elem in g.doc.select('//*[@class="pinHolder"]//a'):
    g.go('https://ru.pinterest.com/' + elem.attr('href'))
    a = g.doc.select('//div[@class="heightContainer"]//img')
    img_url = a.attr('src')
    img_url = img_url.replace('data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=', '')
    g.go(img_url)
    g.response.save(r'path\%d.jpg' % count)
    count += 1
    print img_url


Но дело в том что скрипт забирает только первые 20+ картинок, и останавливается. Я не очень хорошо разбираюсь в работе таких сайтов, но я подумал что это может быть из за того что страница борда подгружается по мере скролинга. В итоге у меня два вопроса, если я прав то как сделать парсинг всех пинов с борда. А если мое предположение неправильное, то в чем тогда может быть проблема.

P.S. То о чем я говорю хорошо видно из борда который указан в теле скрипта (https://www.pinterest.com/einaryoris/topology/) в заголовке указано что в нем 204 пина, а скачивается только 24
  • Вопрос задан
  • 630 просмотров
Решения вопроса 1
dimonchik2013
@dimonchik2013
non progredi est regredi
со сниффером все верно,
с Пинтерестом - 100% дело в этом

еще есть вариант "в лоб": ставим NoScript и отключаем скрипты на странице,
бывает, что сайт настроен и на работу без скриптов - появляется пагинация и т.д.

но бывает, что и просто надпись "включите JS, иначе полноценно не поработаете", и тогда остается имитирование JSON запросов
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@egorsmkv
Воспользуйтесь каким-то HTTP-снифером, чтобы отследить куда идут запросы для загрузки новых пинов, после чего имитируйте свои http-запросы для получения данных.

Наверно, сервер будет отдавать какие-то HTML-данные в JSON-виде.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы