Найти - Пользователи
Полная версия: Парсинг страниц с динамической загрузкой контента
Начало » Data Mining » Парсинг страниц с динамической загрузкой контента
1
Skudetto
Здравствуйте! помогите новичку пожалуйста.
При попытке запарсить сайты где динамически подгружается содержимое, 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)} элементов, должно быть намного больше')
@cckyi_boxxx
Либо отловить в браузере JS запрос к серверу во время загрузки контента, затем разобравшись с алгоритмом генерации запрпоса осуществлять его в своей программе, либо использовать для загрузки страниц Headless браузеры, они позволяют эмулировать скроллинг, соответственно страница будет подгружаться в штатном режиме.
Skudetto
@cckyi_boxxx
отловить в браузере JS запрос к серверу во время загрузки контента
на это не хватает знаний и опыта

@cckyi_boxxx
использовать для загрузки страниц Headless браузеры
Selenium подойдет?
Skudetto
На 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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB