Как запусить парсинг selenium многопоточном режиме?

Не могу разобраться, как запустить webdriver в несколько потоков.

Хочу парсить два сайта одновременно. Есть список ean выглядит
однопоточно, это выглядит так:

def labirint(eanlist):
        pricelist = []
        for ean in eanlist:
            try:
                driver.get("http://www.labirint.ru/search/" + ean + "/?labsearch=1")            
                time.sleep(1)
                labirintBookState(driver)
                if driver.find_element_by_xpath(labirint_xpath_state).is_displayed():
                    x = driver.find_element_by_xpath(labirint_xpath)
                    price_int = int(x.text)
                    pricelist.append(price_int)
                else:
                    pricelist.append("")
            except:
                pricelist.append("")
        return pricelist

    def chitayGorod(eanlist):
        chitay_gorod_pricelist = []
        for ean in eanlist:
            try:

                driver.get("https://www.chitai-gorod.ru/search/result/?q=" + ean + "&page=1")
                time.sleep(1)
                if driver.find_element_by_xpath(chitay_gorod_xpath).is_displayed():
                    price = driver.find_element_by_xpath(chitay_gorod_xpath)
                    price_int = int(re.search(r'\d+', price.text).group())
                    chitay_gorod_pricelist.append(price_int)
                else:
                    chitay_gorod_pricelist.append("")
            except:
                chitay_gorod_pricelist.append("")
        return chitay_gorod_pricelist

option = webdriver.ChromeOptions()
chrome_prefs = {}
option.experimental_options["prefs"] = chrome_prefs
chrome_prefs["profile.default_content_settings"] = {"images": 2}
chrome_prefs["profile.managed_default_content_settings"] = {"images": 2}

driver = webdriver.Chrome(executable_path='C:\priceUpdater\ChromeDriver\chromedriver.exe', chrome_options=option)


if __name__ == "__main__":
    list_ean = getFileEan()

    labirint = labirint(list_ean)
    chitayGorod = chitayGorod(list_ean)
    print(datetime.now() - startTime)
    print("ok!")


Методы в цикле пробегаются по сайтам и собирают данные.

Как мне реализовать, чтобы два процесса driver загружались одновременно и один парсил chitayGorod, а другой labirint ?
В итоге хотелось бы получить следующее:
Чтобы запустились, два driverа параллельно и каждый парсил свой сайт. Нужно запустить два процесса , пусть каждый будет хоститься на ядре проца. Это возможно сделать? И если возможно , то как?
Попробовал, то что находил в интернете по этой теме и ничего подходящего не нашел.
  • Вопрос задан
  • 1736 просмотров
Пригласить эксперта
Ответы на вопрос 2
MatthewAllDev
@MatthewAllDev
Программист, начинающий сисадмин, гик.
Попробуй использовать модуль threading для данных целей. У меня в большинстве случаев он закрывает все вопросы по многопоточности.
Ответ написан
Если вы хотите парсить только 2 сайта, то проще разделить этот скрипт на 2 и запускать параллельно.
Если у вас таких задач много больше, тогда используйте потоки и что бы в ручную не создавать новые окна(driver = webdriver.Chrome) и не придумывать велосипед для них, лучше сразу посмотреть в сторону selenoid или его аналоги.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы