Python转换HTML到Text纯文本的方法


Posted in Python onJanuary 15, 2015

本文实例讲述了Python转换HTML到Text纯文本的方法。分享给大家供大家参考。具体分析如下:

今天项目需要将HTML转换为纯文本,去网上搜了一下,发现Python果然是神通广大,无所不能,方法是五花八门。

拿今天亲自试的两个方法举例,以方便后人:

方法一:

1. 安装nltk,可以去pipy装

(注:需要依赖以下包:numpy, PyYAML)

2.测试代码:

>>> import nltk  

>>> aa = r''''' 

<html> 

    <body> 

 <b>Project:</b> DeHTML<br> 

 <b>Description</b>:<br> 

 This small script is intended to allow conversion from HTML markup to  

 plain text. 

    </body> 

</html> 

'''

>>> aa  

'\n<html>\n            <body>\n                <b>Project:</b> DeHTML<br>\n                <b>Description</b>:<br>\n                This small script is intended to allow conversion from HTML markup to \n                plain text.\n            </body>\n        </html>\n        '  

>>> <strong>print nltk.clean_html(aa)</strong>  

Project: DeHTML   

     Description :   

    This small script is intended to allow conversion from HTML markup to   

    plain text.

方法二:

如果觉得nltk太笨重,大材小用的话,可以自己写代码,代码如下:

from HTMLParser import HTMLParser  

from re import sub  

from sys import stderr  

from traceback import print_exc  

  

class _DeHTMLParser(HTMLParser):  

    def __init__(self):  

        HTMLParser.__init__(self)  

        self.__text = []  

  

    def handle_data(self, data):  

        text = data.strip()  

        if len(text) > 0:  

            text = sub('[ \t\r\n]+', ' ', text)  

            self.__text.append(text + ' ')  

  

    def handle_starttag(self, tag, attrs):  

        if tag == 'p':  

            self.__text.append('\n\n')  

        elif tag == 'br':  

            self.__text.append('\n')  

  

    def handle_startendtag(self, tag, attrs):  

        if tag == 'br':  

            self.__text.append('\n\n')  

  

    def text(self):  

        return ''.join(self.__text).strip()  

  

  

def dehtml(text):  

    try:  

        parser = _DeHTMLParser()  

        parser.feed(text)  

        parser.close()  

        return parser.text()  

    except:  

        print_exc(file=stderr)  

        return text  

  

  

def main():  

    text = r''''' 

        <html> 

            <body> 

                <b>Project:</b> DeHTML<br> 

                <b>Description</b>:<br> 

                This small script is intended to allow conversion from HTML markup to  

                plain text. 

            </body> 

        </html> 

    '''  

    print(dehtml(text))  

  

  

if __name__ == '__main__':  

    main()

运行结果:

>>> ================================ RESTART ================================ 
>>>  
Project: DeHTML  
Description :  
This small script is intended to allow conversion from HTML markup to plain text. 

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python中的ctime()方法使用教程
May 22 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
Python实现Kmeans聚类算法
Jun 10 Python
python中多个装饰器的执行顺序详解
Oct 08 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
python多任务及返回值的处理方法
Jan 22 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
python实现随机加减法生成器
Feb 24 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
Dec 14 Python
解决pytorch 模型复制的一些问题
Mar 03 Python
python中os操作文件及文件路径实例汇总
Jan 15 #Python
python私有属性和方法实例分析
Jan 15 #Python
python实现堆栈与队列的方法
Jan 15 #Python
python多线程用法实例详解
Jan 15 #Python
Python中os.path用法分析
Jan 15 #Python
python静态方法实例
Jan 14 #Python
python继承和抽象类的实现方法
Jan 14 #Python
You might like
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
JavaScript中匿名函数用法实例
2015/03/23 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
vue-router 控制路由权限的实现
2020/09/24 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
python线程中同步锁详解
2018/04/27 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
大学生标准推荐信范文
2013/11/25 职场文书
大学生的网上创业计划书
2013/12/31 职场文书
普通员工辞职信
2014/01/17 职场文书
聘用合同范本
2015/09/21 职场文书
java版 联机五子棋游戏
2022/05/04 Java/Android
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle