Python 数据处理(十八)—— HTML 表格

Python 数据处理(十八)—— HTML 表格,第1张

顶级 read_html() 函数可以接受 HTML 字符串、文件或URL,并将 HTML 表解析为 pandas DataFrames 列表。

注意 :即使 HTML 内容中仅包含一个表, read_html 也会返回 DataFrame 对象的列表

让我们看几个例子

读入 banklist.html 文件的内容,并将其作为字符串传递给 read_html

如果愿意,您甚至可以传入 StringIO 的实例

读取 URL 并匹配包含特定文本的表

指定一个标题行(默认情况下 <th> 或 <td> 位于 <thead> 中的元素用于形成列索引,如果 <thead> 中包含多个行,那么创建一个多索引)

指定索引列

指定要跳过的行数:

使用列表指定要跳过的行数( range 函数也适用)

指定一个 HTML 属性

指定应转换为 NaN 的值

指定是否保持默认的 NaN 值集

可以为列指定转换器。这对于具有前导零的数字文本数据很有用。

默认情况下,将数字列转换为数字类型,并且前导零会丢失。为了避免这种情况,我们可以将这些列转换为字符串

组合上面的选项

读取 to_html 的输出(会损失浮点数的精度)

当只提供了一个解析器时,如果解析失败, lxml 解析器会抛出异常,最好的方式是指定一个解析器列表

但是,如果安装了 bs4 和 html5lib 并传入 None 或 ['lxml','bs4'] ,则解析很可能会成功。

DataFrame 对象有一个实例方法 to_html ,它将 DataFrame 的内容呈现为 html 表格。

函数参数与上面描述的方法 to_string 相同。

columns 参数将限制显示的列

float_format 参数控制浮点值的精度

bold_rows 默认情况下将使行标签加粗,但你可以关闭它

classes 参数提供了给 HTML 表 设置 CSS 类的能力。

请注意,这些类附加到现有的 dataframe 类之后

render_links 参数提供了向包含 url 的单元格添加超链接的能力

最后, escape 参数允许您控制 HTML 结果中是否转义了 "<" 、 ">" 和 "&" 字符(默认情况下为 True )。

因此,要获得没有转义字符的 HTML ,请传递 escape=False

转义

不转义

在某些浏览器上这两个 HTML 表可能并不会显示出差异。

在顶级 pandas io 函数 read_html 中,用于解析 HTML 表的库存在一些问题

模板语言由HTML代码和逻辑控制代码组成,此处 @PHP 。通过模板语言可以快速的生成预想的HTML页面。应该算是后端渲染不可缺少的组成部分。

通过使用学习 tornado bottle 的模板语言,我也效仿着实现可以独立使用的模板渲染的代码模块,模板语法来自 tornado bottle 的语法。可以用来做一些简单的事情 网页渲染 邮件内容生成 等HTML显示方面。以下就是简单的语法使用介绍。

1. 变量。使用 {{ }} 包裹起来,里面的变量为Python传入。模板渲染时会将传入的变量转换成字符串并填入对应位置。

2. 转义。默认传入的数据都会进行HTML转义,可以使用 {% raw value %} 来将value的内容按原始字符串输出。

3. 条件控制。支持Python的 if,elif,else 。条件代码需要放在 {% %} 内部,并且在条件结束后需要额外增加 {% end %} ,用于标识条件控制语句块范围。

4. 循环控制。支持Python的 for while 。与条件控制一样也需要放在 {% %} 内部,并且结束处需要额外增加 {% end %} ,用于标识循环控制语句块的范围。

这个模板语言模块是在 Python2.7 上面开发使用的,如果要在 Python3+ 上使用需要对 str bytes 进行一些处理即可,由于没有引用任何其他模块,可以很好地独立使用。

原文链接:

http://www.cnblogs.com/jeffxun/p/15585073.html

比如:

比如,数学符号 , ,可以直接获得:

escape 将特殊字符 & , < 和 > 替换为HTML安全序列。如果可选的 flags quote 为 True (默认值),则还会翻译引号字符,包括双引号( " )和单引号( ' )字符。

将字符串 s 中的所有命名和数字字符引用 (例如 >, >, >) 转换为相应的 Unicode 字符。此函数使用 HTML 5 标准为有效和无效字符引用定义的规则,以及 HTML 5 命名字符引用列表 。

这个模块定义了一个 HTMLParser 类,为 HTML(超文本标记语言)和 XHTML 文本文件解析提供基础。

class html.parser.HTMLParser(*, convert_charrefs=True) 创建一个能解析无效标记的解析器实例。查找标签(tags)和其他标记(markup)并调用 handler 函数。

用法:

通过调用 self.handle_starttag 处理开始标签,或通过调用 self.handle_startendtag 处理结束标签。标签之间的数据通过以 data 为参数调用 self.handle_data 从解析器传递到派生类(数据可以分成任意块)。如果 convert_charrefs 为 True ,则将字符引用自动转换为相应的 Unicode 字符(并且 self.handle_data 不再拆分成块),否则通过调用带有字符串的 self.handle_entityref 或 self.handle_charref 来传递它们以分别包含命名或数字引用作为参数。如果 convert_charrefs 为 True (默认值),则所有字符引用( script / style 元素中的除外)都会自动转换为相应的 Unicode 字符。

一个 HTMLParser 类的实例用来接受 HTML 数据,并在标记开始、标记结束、文本、注释和其他元素标记出现的时候调用对应的方法。要实现具体的行为,请使用 HTMLParser 的子类并重载其方法。

这个解析器不检查结束标记是否与开始标记匹配,也不会因外层元素完毕而隐式关闭了的元素引发结束标记处理。

下面是简单的 HTML 解析器的一个基本示例,使用 HTMLParser 类,当遇到开始标记、结束标记以及数据的时候将内容打印出来。

输出:

HTMLParser.reset() 重置实例。丢失所有未处理的数据。在实例化阶段被隐式调用。

HTMLParser.feed(data) 填充一些文本到解析器中。如果包含完整的元素,则被处理;如果数据不完整,将被缓冲直到更多的数据被填充,或者 close() 被调用。 data 必须为 str 类型。

HTMLParser.close() 如同后面跟着一个文件结束标记一样,强制处理所有缓冲数据。这个方法能被派生类重新定义,用于在输入的末尾定义附加处理,但是重定义的版本应当始终调用基类 HTMLParser 的 close() 方法。

HTMLParser.getpos() 返回当前行号和偏移值。

HTMLParser.get_starttag_text() 返回最近打开的开始标记中的文本。结构化处理时通常应该不需要这个,但在处理“已部署”的 HTML 或是在以最小改变来重新生成输入时可能会有用处(例如可以保留属性间的空格等)。

下列方法将在遇到数据或者标记元素的时候被调用。他们需要在子类中重载。基类的实现中没有任何实际 *** 作(除了 handle_startendtag() ):

HTMLParser.handle_starttag 这个方法在标签开始的时候被调用(例如: <div id="main">)。 tag 参数是小写的标签名。 attrs 参数是一个 (name, value) 形式的列表,包含了所有在标记的 <> 括号中找到的属性。 name 转换为小写, value 的引号被去除,字符和实体引用都会被替换。比如,对于标签 <a href="https://www.cwi.nl/">,这个方法将以下列形式被调用 handle_starttag('a', [('href', 'https://www.cwi.nl/')]) 。 html.entities 中的所有实体引用,会被替换为属性值。

HTMLParser.handle_endtag(tag) 此方法被用来处理元素的结束标记(例如: </div>)。 tag 参数是小写的标签名。

HTMLParser.handle_startendtag(tag, attrs) 类似于 handle_starttag() , 只是在解析器遇到 XHTML 样式的空标记时被调用( <tag ... />)。这个方法能被需要这种特殊词法信息的子类重载;默认实现仅简单调用 handle_starttag() 和 handle_endtag() 。

HTMLParser.handle_data(data) 这个方法被用来处理任意数据(例如:文本节点和 <script>...</script> 以及 <style>...</style> 中的内容)。

HTMLParser.handle_entityref(name) 这个方法被用于处理 &name 形式的命名字符引用(例如 >),其中 name 是通用的实体引用(例如: 'gt' )。如果 convert_charrefs 为 True,该方法永远不会被调用。

HTMLParser.handle_charref(name) 这个方法被用来处理 NNN 和 NNN 形式的十进制和十六进制字符引用。例如, > 等效的十进制形式为 >,而十六进制形式为 > ;在这种情况下,方法将收到 '62' 或 'x3E' 。如果 convert_charrefs 为 True ,则该方法永远不会被调用。

HTMLParser.handle_comment(data) 这个方法在遇到注释的时候被调用(例如: )。例如, 这个注释会用 ' comment ' 作为参数调用此方法。

Internet Explorer 条件注释(condcoms)的内容也被发送到这个方法,因此,对于 ``,这个方法将接收到 '[if IE 9]>IE9-specific content<![endif]' 。

HTMLParser.handle_decl(decl) 这个方法用来处理 HTML doctype 申明(例如 <!DOCTYPE html>)。 decl 形参为 <!...> 标记中的所有内容(例如: 'DOCTYPE html' )。

HTMLParser.handle_pi(data) 此方法在遇到处理指令的时候被调用。 data 形参将包含整个处理指令。例如,对于处理指令 <?proc color='red'>,这个方法将以 handle_pi("proc color='red'") 形式被调用。它旨在被派生类重载;基类实现中无任何实际 *** 作。

注解: HTMLParser 类使用 SGML 语法规则处理指令。使用 '?' 结尾的 XHTML 处理指令将导致 '?' 包含在 data 中。

HTMLParser.unknown_decl(data) 当解析器读到无法识别的声明时,此方法被调用。 data 形参为 <![...]> 标记中的所有内容。某些时候对派生类的重载很有用。基类实现中无任何实际 *** 作。

因此,我们可以如此定义:

下面介绍如何解析 HTML 文档。

解析一个文档类型声明:

解析一个具有一些属性和标题的元素:

script 和 style 元素中的内容原样返回,无需进一步解析:

解析注释:

解析命名或数字形式的字符引用,并把他们转换到正确的字符(注意:这 3 种转义都是 '>' ):

填充不完整的块给 feed() 执行, handle_data() 可能会多次调用(除非 convert_charrefs 被设置为 True ):

解析无效的 HTML (例如:未引用的属性)也能正常运行:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6135652.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存