Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
1

Парсинг Beautiful Soup 4 и Selenium.Webdriver

20.12.2017, 16:13. Показов 2461. Ответов 1
Метки нет (Все метки)

Здравствуйте, пишу парсер под сайт https://www.kimovil.com/ru/ и возникает проблема: товары динамически подгружаются.
Сначала были просмотрены запросы, которые отправляет сайт для подгрузки товаров.
Несколько раз перезапустив браузер, было выяснено, что запросы постоянно меняются и закономерности выявить не получилось.
В ходе поиска нашел решение использования Selenium для эмуляции драйвера. Использование кода из примера для скролинга страницы вниз ни к чему не приводит, скорее всего из-за того что на странице 3 рабочей области.
Как указать скролинг для определенной рабочей области?
А пока нашел временный способ, обращаться через страницы, но скорее откажусь от Selenium из-за большого времени выполнения и буду использовать просто request
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def init_driver():
    ff = "../install/geckodriver"
    driver = webdriver.Firefox(executable_path=ff)
    driver.wait = WebDriverWait(driver,3)
    return driver
 
 
def lookup(driver):
    url_id=1
    while url_id<180:
        url=driver.get("https://www.kimovil.com/ru/compare-smartphones/page."+str(url_id))
        time.sleep(0.5)
        # soup=BeautifulSoup(driver.page_source,'lxml')
        #
        # a_phone=soup.find_all("a",{"class" : "price-from"})
        # for href in a_phone:
        #    print(href.get("href"))
        url_id+=1
 
 
if __name__ == "__main__":
    start=time.time()
    driver = init_driver()
    lookup(driver)
    print(start)
Добавлено через 37 секунд
Почему-то ссылка на сайт с примером кода блокируется, поэтому его скидываю сюда
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
driver = webdriver.Firefox()
    driver.get(url)
    # driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    SCROLL_PAUSE_TIME = 3
 
    # 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
    return driver.page_source
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2017, 16:13
Ответы с готовыми решениями:

В чем проблема? (Beautiful Soup)
from bs4 import BeautifulSoup import requests headers = { 'user-agent': 'Mozilla/5.0...

Beautiful Soup - существует ли ограничения на длину получаемых данных?
Здравствуйте! Почему при парсинге html достается только часть данных, которые все лежат в одном...

Beautiful Soup 4, сравнение html-парсеров при запуске в потоке
Здравствуйте, спарсил страницу с помощью lxml, встроенного в Beautiful Soup - выдал 30 секунд. Не...

Selenium webdriver подключиться ?
Такой код: from selenium import webdriver Chrome_Browser = webdriver.Chrome() Chrome_Browser...

1
109 / 90 / 47
Регистрация: 07.12.2016
Сообщений: 188
25.12.2017, 09:59 2
Цитата Сообщение от danilshik Посмотреть сообщение
Несколько раз перезапустив браузер, было выяснено, что запросы постоянно меняются и закономерности выявить не получилось.
Плохо выясняли значит. Если еще актуально, то вот вам подарок подсказка)) "https://www.kimovil.com/ru/compare-smartphones/page.1"
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2017, 09:59

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Selenium webdriver как узнать имя фрейма
Нужная мне страница после нажатия кнопки AJAX-ом подгружает данные. Если в Хроме на эти данные...

Парсинг в selenium
Есть такой кусок кода, который хочет спарсить информацию отсюда: &lt;tbody id=&quot;Early_29_2686&quot;...

Запуск рандомным образом Webdriver Selenium в Pyton
Нужно по псевдослучайному закону запустить webdriver. Вот такая конструкция не проходит: import...

Beautiful Soup Python
Я пишу программу открывающую все ссылки на указанной странице и выписывает те, у которых в url есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.