使用 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 beautifulsoup4
和 pip 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函数读取文件并将缺失值转化为空字符串