Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Data Mining
  • » Парсинг страниц с динамической загрузкой контента [RSS Feed]

#1 Апрель 17, 2020 02:56:00

Skudetto
Зарегистрирован: 2020-04-12
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг страниц с динамической загрузкой контента

Здравствуйте! помогите новичку пожалуйста.
При попытке запарсить сайты где динамически подгружается содержимое, requsts читает только часть страницы.. например
https://kirgu.ru/catalog/posuda_dlya_gotovki_1/posuda_dlya_prigotovleniya_1/kastryuli_mantovarki_skorovarki_1/
с этой страницы получается прочитать только 15 элементов. Остальные появляются в браузере по мере прокрутки страницы, но как ее прокрутить в python?
А на сайте https://www.dns-shop.ru/catalog/17a892f816404e77/noutbuki/
не удается прочитать цену.. т.к. они тоже подгружаются динамически..

 import requests
from bs4 import BeautifulSoup, ResultSet
KIRGURL='https://kirgu.ru/catalog/posuda_dlya_gotovki_1/posuda_dlya_prigotovleniya_1/kastryuli_mantovarki_skorovarki_1/'
HEADERS = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}
def get_html(url, params=None):
    r = requests.get(url, headers=HEADERS, params=params)
    if r.status_code !=200:
        print(f'Ошибка запроса {url[0:20]}..., код ответа сервера не 200')
    else:
        print(f'Запрос {url[0:20]}... выполнен успешно.')
    return r
html = get_html(KIRGURL)
soup = BeautifulSoup(html.text, "html.parser")
items = soup.find_all('div', class_='list-showcase__part-main')
print (f'только {len(items)} элементов, должно быть намного больше')

Офлайн

#2 Апрель 17, 2020 14:20:24

@cckyi_boxxx
От:
Зарегистрирован: 2012-01-13
Сообщения: 181
Репутация: +  14  -
Профиль   Отправить e-mail  

Парсинг страниц с динамической загрузкой контента

Либо отловить в браузере JS запрос к серверу во время загрузки контента, затем разобравшись с алгоритмом генерации запрпоса осуществлять его в своей программе, либо использовать для загрузки страниц Headless браузеры, они позволяют эмулировать скроллинг, соответственно страница будет подгружаться в штатном режиме.



Офлайн

#3 Апрель 17, 2020 14:37:43

Skudetto
Зарегистрирован: 2020-04-12
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг страниц с динамической загрузкой контента

@cckyi_boxxx
отловить в браузере JS запрос к серверу во время загрузки контента
на это не хватает знаний и опыта

@cckyi_boxxx
использовать для загрузки страниц Headless браузеры
Selenium подойдет?

Офлайн

#4 Апрель 18, 2020 01:00:35

Skudetto
Зарегистрирован: 2020-04-12
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг страниц с динамической загрузкой контента

На Selenium получилось!

     driver = webdriver.Chrome()
    driver.get(url)
    #скроллим сайт чтобы открылись все товары взято с https://fooobar.com/questions/147938/how-can-i-scroll-a-web-page-using-selenium-webdriver-in-python
    SCROLL_PAUSE_TIME=0.5
    # Get scroll height
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        # Scroll down to bottom
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        # Wait to load page
        time.sleep(SCROLL_PAUSE_TIME)
        # Calculate new scroll height and compare with last scroll height
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height

Отредактировано Skudetto (Апрель 18, 2020 01:01:09)

Офлайн

  • Начало
  • » Data Mining
  • » Парсинг страниц с динамической загрузкой контента[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version