@san_m_m

Как спарсить эту страницу с кнопкой?

Добрый день!

Есть такая страница https://gosuslugi.primorsky.ru/registry/taxi.htm

Подскажите как можно спарсить данную страницу с помощью python? Точнее решить проблему с кнопкой Загрузить...
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Roktober
Люблю Linux && Python
Тут нужен selenium, с ним можно нажимать копки и управлять страницей как с обычного браузера
Вот примеры с css selector и id
Но нужно быть осторожным, selenium не позволяет нормально отследить прогрузку страницы, поэтому используйте sleep или WebDriverWait если знаете, какой элемент ищете
Примеры для сайта https://dbkpop.com/db/all-k-pop-idols, не знаю как сейчас, но раньше работали
def expand_table(self):
        css = "button.btn.dropdown-toggle.btn-default"
        self.driver.execute_script(f"document.querySelector('{css}').scrollIntoView();")
        button = self.driver.find_elements_by_css_selector(css)
        if button:
            button[0].click()
            button_all = self.driver.find_elements_by_link_text("All")
            button_all[0].click()
        time.sleep(30)

    def accept_cookie(self):
        try:
            cn = WebDriverWait(self.driver, 10).until(
                EC.presence_of_element_located((By.ID, "cn-accept-cookie"))
            )
            cn.click()
        except:
            pass
        try:
            cn = WebDriverWait(self.driver, 10).until(
                EC.presence_of_element_located((By.ID, "onesignal-popover-cancel-button"))
            )
            cn.click()
        except:
            pass
        time.sleep(10)

Для парсинга лучше используйте lxml или bs4 с движком lxml, он работает намного быстрее, пример с таблицей
def get_table_data(self):
        self.table = self.driver.find_elements_by_id(self.table_id)[-1]
        for th in self.table.find_elements_by_xpath(".//thead//tr")[0].find_elements_by_xpath(".//th"):
            self.table_headers.append(th.text)
        table_data = self.table.find_elements_by_xpath(".//tbody//tr")
        module_logger.info(f"Founded {len(table_data)} tr in table")
        for tr in table_data:
            data = []
            for td in tr.find_elements_by_xpath(".//td"):
                in_td = td.find_elements_by_xpath(".//*")
                if in_td:
                    in_td = in_td[-1]
                    if in_td.tag_name == "a":
                        link = in_td.get_attribute("href")
                        data.append(link)
                    else:
                        text = in_td.text
                        if text:
                            data.append(text)
                else:
                    data.append(td.text)
            self.table_data.append(data)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы