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