如何从web组件转换为pandas数据帧



我正在尝试定义两个函数,以便使用链接和xpath将web上的任何表轻松地抓取为pandas数据帧。然而,一旦我尝试使用pd.readhtml,我就会收到错误"ValueError:找不到表">我添加了一个print(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:webdriverschromedriver")
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')

相关内容

最新更新