是否有可能从此页面中删除数据?

时间:2018-02-18 08:34:44

标签: python html data-extraction

我在从这个页面中提取表时遇到问题,我真的需要这些数据用于我的论文。我提出了这个代码,但它被困在第二行。

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)

有什么建议吗?

1 个答案:

答案 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))})


您可以按照第二个表的类似步骤进行操作。希望这有帮助!