首页 > 解决方案 > 将表数据转换为数据框并过滤

问题描述

我正在从这个网站上抓取 Over/Under 赔率数据:https ://www.oddsportal.com/soccer/uruguay/segunda-division/juventud-sud-america-I1G8VYUr/?r=1#over-under;2;6.50 ;0

抓取发生如下:

url='https://www.oddsportal.com/soccer/chile/primera-division/curico-unido-o-higgins-CtsLggl6/'
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.get(url)
    overunder=browser.find_element_by_css_selector("a[title='Over/Under']").click()
browser.maximize_window()
    
odds_rows = WebDriverWait(browser, 10).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.table-header-light')))

    for i in odds_rows:
        count = i.find_element_by_xpath('./span[@class="odds-cnt"]')
        elem = i.find_elements_by_xpath('.//[contains(text(),"Compare")]')
        txt = count.text

        if txt != '' and len(elem):
            elem = elem[0]
            browser.execute_script("arguments[0].scrollIntoView();", elem)
            elem.click()

我正在循环浏览多个比赛页面并为存储在表格中的多个投注提供商抓取大小盘赔率数据:[赔率表][1]

数据存储在我已经抓取的类表容器中:

table_src=WebDriverWait(browser, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.table-container')))

接下来我试图将这些数据解析成行和列:

appended_data=[]
for i in table_src:
    html_src=i.get_attribute('innerHTML')
    soup= BeautifulSoup(html_src,'html.parser')
    tab_data = [[cell.text for cell in row.find_all(["th","td"])]
                       for row in soup.find_all("tr")]

接下来,我尝试将其添加到 Dataframe 中:

    appended_data.append(tab_data)
    # df = pd.DataFrame(tab_data)
    df = pd.DataFrame(appended_data)

然而,这给我留下了一个非常奇怪和令人费解的 DF:[Dataframe][2]

可以看出,数据框有很多列。理想情况下,我希望 DF 只包含这些列:Bookmaker、Total、Over、Under、Payout

然后我想过滤两个特定的博彩公司,如下所示:

   appended_data.loc[appended_data['0'].isin(bookmakers)]

我缺少什么来完成这项工作?[1]:https ://i.stack.imgur.com/dmadi.png [2]:https ://i.stack.imgur.com/xJcqo.png

标签: pythonhtmlpandas

解决方案


推荐阅读