@Kuubik
Python вэб разработчик, личинка juniorа,говнокодер

Парсер выдает кашу?

Всем здрасть! Проблема в следующем при парсинге страницы скрапер вытягивает первые 16 ссылок а потом вытягивает какую то кашу, поломав немного голову понял что эта каша проходит только в том случае если при открытии страницы перейти в режим разработчика вбить в поиск отрывок и пробежаться по нему то каша превращается в нормальные ссылки и скрапер отрабатывает на ура, я уже ставил задержку при парсинге но это не помогает если кто знает в каком направлении копать буду рад за пинок в нужном русле!

data:image/gif;base64,R0lGODdhFQAXAPAAANba3wAAACwAAAAAFQAXAAACFISPqcvtD6OctNqLs968+w+GolUAADs= (сама каша)

driver = webdriver.Chrome('/usr/bin/chromedriver')
headers = {'accept':'*/*',
'user-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'} # вот настройки возможно проблема в них так что
url = 'https://www.redbubble.com/shop/bees?ref=search_box' #УРЛ КОТОРЫЕ ПЕРЕДАЮ В ФУНКЦИЮ
def find_from_title_png(url, headers):
    driver.get(url)
    time.sleep(15)
    tutorial_soup = BeautifulSoup(driver.page_source, 'html.parser')
    tutorial_code_soup = tutorial_soup.find_all('img', attrs={'class':'styles__image--2CwxX styles__image--2yCHr'})
    print(tutorial_code_soup)
    for link2 in tutorial_code_soup:
        new_link = link2.get('src')
        print(new_link)
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
Что за? Зачем вы открываете страницу с Selenium, а парсите с BS4? Это какой-то особый вид извращений?
Страницу нужно прокрутить вниз, что-бы прогрузились все элементы.
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

Возможно скроллить нужно будет в цикле несколько раз, если за один мах грузятся не все элементы.
Selenium умеет в чудесные xpath, а вы пытаетесь собрать элементы по динамичным атрибутам. Не надо так. Надо, примерно, вот так:
images = driver.find_elements_by_xpath('.//img[contains(@class, "image")][@srcset]')

Вот так тоже не делайте:
driver.get(url)
time.sleep(15)

Код дальше driver.get() не сдвинется, пока страница не будет загружена, так что вам не нужно ничего ждать. А если есть элементы, которые грузятся уже после того, как основная страница загружена, то нужно использовать ожидания.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@deliro
Агрессивное программирование
Эта каша называется base64. Можешь эту кашу вставить в строку браузера и увидеть, что это гифка без движения 23х21 пиксель
Ответ написан
Комментировать
LaRN
@LaRN
Senior Developer
Вот тут описано что это такое: https://habr.com/ru/post/116538/
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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