Задать вопрос
Ответы пользователя по тегу Python
  • Как из телеграм-бота передать информацию в гугл-таблицы?

    @Roktober
    Люблю Linux && Python
    Какое совпадение, вчера писал такую штуку
    советую использовать gspread
    https://gitlab.com/roktober/money_observer
    Ответ написан
  • Как спарсить эту страницу с кнопкой?

    @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)
    Ответ написан
    Комментировать