我在从这个页面中提取表时遇到问题,我真的需要这些数据用于我的论文。我提出了这个代码,但它被困在第二行。
browser.get('https://www.eex.com/en/market-data/power/futures/french-futures#!/2018/02/01')
table = browser.find_element_by_xpath('//*[@id="content"]/div/div/div/div[1]/div/div/div')
html_table = html.fromstring(table.get_attribute('innerHTML'))
html_code = etree.tostring(html_table)
df = pd.read_html(html_code)[0]
df.drop(['Unnamed: 12', 'Unnamed: 13'], axis=1, inplace=True)
有什么建议吗?
答案 0 :(得分:1)
您可以随时手动解析表格。
我更喜欢使用BeautifulSoup
,因为我发现它更容易使用。
from bs4 import BeautifulSoup
soup = BeautifulSoup(browser.page_source, "html.parser")
让我们解析第一个表,并获取列名:
table = soup.select("table.table-horizontal")[0]
columns = [i.get_text() for i in table.find_all("th")][:-2] ## We don't want the last 2 columns
现在,让我们逐行查看表格:
rs = []
for r in table.find_all("tr"):
ds = []
for d in r.find_all("td"):
ds.append(d.get_text().strip())
rs.append(ds[:-2])
您可以使用列表推导更简洁地编写相同的代码:
rs = [[d.get_text().strip() for d in r.find_all("td")][:-2] for r in table.find_all("tr")]
接下来,我们过滤rs
以删除包含length != 12
的列表(因为我们有12列):
rs = [i for i in rs if len(i)==12]
最后,我们可以将其放入DataFrame
:
df = pd.DataFrame({k:v for k, v in zip(columns, zip(*rs))})
您可以按照第二个表的类似步骤进行操作。希望这有帮助!