簡體   English   中英

我如何從 webcomponent 轉換為 pandas 數據框

[英]how do i convert from a webcomponent to pandas dataframe

我正在嘗試定義兩個函數,以便使用鏈接和 xpath 輕松地從網絡上抓取任何表格作為 Pandas 數據框。 然而,一旦我嘗試使用 pd.readhtml,我就會收到錯誤“ValueError: No tables found”,我添加了一個打印(html),令我驚訝的是,html 包含我的純文本數據。 所有的 html 代碼都消失了。 知道為什么會發生這種情況以及如何從 webelement 轉換為 Pandas 數據框嗎?

我的代碼:

import pandas as pd

def openchrome():
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    
    #open browser
    opt = webdriver.ChromeOptions()
    opt.add_argument('headless')
    serv = Service("d:\webdrivers\chromedriver")
    browser = webdriver.Chrome(service=serv,options=opt)
    return browser

def scrape(browser, link, xpath):
    from selenium.webdriver.common.by import By
    browser.get(link)
    html = browser.find_element( By.XPATH , xpath)
    print(html)
    df = pd.read_html(html)
    return df
    #df=pd.dataframe()
    #return df

browser = openchrome()
df = scrape(browser, 'https://www.multpl.com/s-p-500-pe-ratio/table/by-year', '/html/body/div[2]/div[2]/div[2]/div[1]/div[3]/div/div[1]/table')
  

由於錯誤狀態,沒有找到表。 為什么?

  1. pd.read_html無法解析 WebElement,只能解析 URL、類似文件的對象或包含 HTML 的原始字符串。 也就是說,您可以使用html.get_attribute('outerHTML')來獲取 WebElement 原始 HTML 作為pd.read_html參數。
def scrape(browser, link, xpath):
    from selenium.webdriver.common.by import By
    browser.get(link)
    html = browser.find_element(By.XPATH, xpath)
    print(html.get_attribute('outerHTML'))
    df = pd.read_html(html.get_attribute('outerHTML'))
    return df
    # df=pd.dataframe()
    # return df


browser = openchrome()
df = scrape(browser, 'https://www.multpl.com/s-p-500-pe-ratio/table/by-year',
            '/html/body/div[2]/div[2]/div[2]/div[1]/div[3]/div/div[1]/table')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM