使用 pandas 读取下载的 html 文件

Posted

技术标签:

【中文标题】使用 pandas 读取下载的 html 文件【英文标题】:Using pandas to read downloaded html file 【发布时间】:2014-09-23 05:37:00 【问题描述】:

作为标题,我尝试使用read_html,但出现以下错误:

In [17]:temp = pd.read_html('C:/age0.html',flavor='lxml')
  File "<string>", line unknown
XMLSyntaxError: htmlParseStartTag: misplaced <html> tag, line 65, column 6

我做错了什么?

更新01

HTML 在顶部包含一些 javascript,然后是一个 html 表格。我使用 R 通过 XML 包解析 html 来处理它,给我一个数据框。我想用 python 来做,在给 pandas 之前,我应该用 beautifulsoup 之类的东西吗?

【问题讨论】:

那么age0.html的内容是什么? pandas.pydata.org/pandas-docs/dev/generated/…: "flavor : str or None, container of strings 要使用的解析引擎。'bs4' 和 'html5lib' 是同义词,它们都是为了向后兼容而存在的。默认值 None 尝试使用 lxml 进行解析,如果失败,则使用 bs4 + html5lib。”我的猜测是 html 格式不正确并且解析失败。尝试不同的解析器?风味='bs4' 只是另一个。如果从珍贵的笔记中不清楚。 read_html 方法可以使用 beautifull soup 作为解析器,请查看上面链接中的 pandas 文档。语法错误听起来好像 HTML 格式不正确,使用不同的 aprser 可能更宽容。 为此使用lxml(实际上是任何格式错误的HTML)都是一个坏主意。您应该 pip install beautifulsoup4pip install html5lib 并在没有任何 flavor 参数的情况下调用 read_html。这些会慢得多,但我会在任何一天慢慢地纠正而不是快速和不正确。老实说,我们应该从一开始就扔掉lxml,但现在有点太晚了。 您收到此错误是因为我强制 lxml 严格要求。在过去,lxml 已经丢弃了某些格式错误的 HTML 的数据,恕我直言,这并不酷。其他库 OTOH 不这样做,因此不会删除数据。 【参考方案1】:

我认为通过使用漂亮的汤之类的 html 解析器,您走在了正确的轨道上。 pandas.read_html() 读取的是 html 表格而不是 html 页面。

你会想做这样的事情......

from bs4 import BeautifulSoup
import pandas as pd

table = BeautifulSoup(open('C:/age0.html','r').read()).find('table')
df = pd.read_html(table) #I think it accepts BeatifulSoup object
                         #otherwise try str(table) as input

【讨论】:

无法使此解决方案正常工作(但我也无法安装可能与它有关的 lxml)。但是,df = pd.read_html('path/to/file.html', flavor='bs4') 工作正常。【参考方案2】:

    首先安装下面的包进行解析

    pip install BeautifulSoup4 点安装 lxml 点安装html5lib

    然后使用 'read_html' 读取任何 html 页面上的 html 表格。


    import pandas as pds
    pds_df = pds.read_html('C:/age0.html')
    pds_df[0]
    

我希望这会有所帮助。

祝你好运!!

【讨论】:

以上是关于使用 pandas 读取下载的 html 文件的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用read_csv函数读取文件最后N行数据并保留表头pandas使用read_csv函数读取网络url链接数据

python pandas读取excel-Python使用Pandas读写EXCEL文件教程

pandas使用read_csv函数读取文件并解析日期数据列(parse dates)pandas使用read_csv函数读取文件并将缺失值转化为空字符串

如何将SalesForce数据导入Python Panda数据帧

python Pandas 读取数据,写入文件

从阿里巴巴 OSS 中读取一个对象并使用 pandas python 修改它