【问题标题】:Using pandas to read downloaded html file使用 pandas 读取下载的 html 文件
【发布时间】: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 不这样做,因此不会删除数据。

标签: python html import pandas


【解决方案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】:
  1. 首先安装下面的包进行解析

    • pip install BeautifulSoup4
    • 点安装 lxml
    • 点安装html5lib
  2. 然后使用 'read_html' 读取任何 html 页面上的 html 表格。


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

我希望这会有所帮助。

祝你好运!!

【讨论】:

    猜你喜欢
    • 2018-02-03
    • 2018-01-25
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多