Парсинг с открытием информации
Нужно спарсить номера тел. отсюда.
В html, при открытие страницы, номера нет. После нажатия на кнопку "показать телефон", html обновляется уже с номером.
Нашел вариант решения в виде selenium, но получается очень долго(открывает сайт, клацает на кнопку).
driver = webdriver.Firefox()
driver.get(f'{url}')
driver.find_element_by_class_name('link-phone').click()
Думал достать html-код из ответа в Сеть->XHR->ответ. Как итог, не разобрался что к чему, ну и ответа не получил.
Правильно ли выбрал решение в виде selenium? Если да, то как ускорить процесс открытия.
Как попробовать достать телефон со страницы?(проблема в одинаковых тегах 'p')
Ответы (2 шт):
Элементы следует определять заранее по их локаторам.
// CSS локатор элемента открывающего телефон
String activeFieldWithTextPhone = "a.link-phone";
// Xpath локатор поля содержащего номер телефона
Strign fieldWithPhoneNumber = "//*[@id='job-description']/p[last()]"
Следует использовать ожидание.По первому элементу надо просто нажать что не составляет труда. А из второго нужно получить текст и извлечь только числа, чтобы остался лишь номер телефона.
Выглядеть методы будут следующим образом
void waitForCssElementAndClick(String element) {
WebDriverWait wait = new WebDriverWait(Driver, 10); // Wait for 10 seconds.
wait.until(ExpectedConditions.visibilityOfElementLocated(By.css(element)));
driver.findElement(By.сss(element)).click();
}
String waitForXpathElementAndGetNumbers(String element) {
WebDriverWait wait = new WebDriverWait(Driver, 10); // Wait for 10 seconds.
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(element)));
return driver.findElement(By.xpath(element)).text().replaceAll("[^0123456789]", "");
}
Осталось только использовать
waitForCssElementAndClick(activeFieldWithTextPhone);
String phone = waitForXpathElementAndGetNumbers(fieldWithPhoneNumber);
Пример приведён на языке Java, но я думаю вам не составит труда преобразовать его в Python. Удачи.
Используте либу 'HTMLAgilitypack' но у них нету под пайтон, только шарпы. Вот тут ответ есть https://stackoverflow.com/questions/1838637/html-agility-pack-for-python