Как я могу динамически создать pandas фрейм данных на основе очищенных заголовков - PullRequest
0 голосов
/ 29 марта 2020

У меня есть две функции, которые очищают две разные таблицы на этом сайте (вам нужно создать быструю учетную запись и войти в систему, чтобы увидеть ее). Первая таблица отлично работает и легко адаптируется к разным страницам в одном формате, поскольку заголовки столбцов не меняются (функция scrape_column). Однако для второй таблицы (функция scrape_by_county_table заголовки почти всегда меняются от страницы к странице, поэтому мне нужен способ динамически связывать данные, очищенные с каждым заголовком, и правильно связывать их в словаре pandas dataframe Я пробовал пару разных вещей, которые не сработали, помощь очень ценится !!

Мой код:

# Dictionary that associates easier to understand words to the actual column numbers in the table
    columns = { "Candidates": "2", "Votes": "3", "Pcts": "4", "5": "5", "Check": "5" }

    # Function to convert column name to column number, find the column, and get it's text
    def scrape_column (column):
        column_number = columns[column]
        col_values = []
        raw = WebDriverWait(driver, delay).until(EC.presence_of_all_elements_located((By.XPATH, f"//div[@class='top-line-table']//tbody//td[{column_number}]")))
        for ii in raw:
            col_values.append(ii.text)
        return col_values

    # Function to scrape each column of the county table
    def scrape_by_county_table(column):
        headers = driver.find_elements_by_xpath(f'//*[@id="content"]/div/div[3]/div/div[2]/div/div[2]/div/div[2]/div[1]/div/table/thead/tr/th')
        county_table_header_values = []
        for each in headers:
            county_table_header_values.append(each.text)
        # print(county_table_header_values)

        county_table_col_values = []
        raw_counties = driver.find_elements_by_xpath(f'//*[@id="content"]/div/div[3]/div/div[2]/div/div[2]/div/div[2]/div[1]/div/table/tbody/tr/td[{column}]')
        for i in raw_counties:
            county_table_col_values.append(i.text)
        return county_table_col_values


    candidates = scrape_column("Candidates")
    votes = scrape_column("Votes")
    percentages = scrape_column("Pcts")
    #

    final_results = pd.DataFrame ({
        "Candidate": candidates,
        "Votes": votes,
        "Percentage": percentages,
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...