zoukankan      html  css  js  c++  java
  • Python HTMLParser中有关转义字符的Problem&Solution

    此文仅仅是记录了一个real project中出现的problem和我的unofficial solution,for reference only.

    HTMLParser在使用中出现的一个Problem

    在Python爬虫等项目中我们常常会遇到从HTML文件中提取信息的场景,比较通用的方案是使用HTMLParser模块将HTML的标签与内容分离,进而解析内容。

    在我的实际使用中,HTMLParser解析过程中会舍弃Unicode转义字符的中文Unicode(&#xxxxx),为此我不得不在HTMLParser处理HTML内容前事先使用HTMLParser().unescape()来将内容中的Unicode转换为UTF-8(without DOM),从而使中文能够被解析。
    此尝试的方法又引发了一个更严重的BUG,在解析过程中,由于我对内容中的尖括号进行了提前转义,造成了标签混乱,影响了HTMLParser的解析,所以需要做一些改进。

    Solution

    在使用Unicode to UTF-8转义前应该逐行使用AngleBracketsDisplacement来替换'<'和 '>'

    def AngleBracketsDisplacement(unsecure_str):
        secure_str = unsecure_str.replace('&lt;', 'LEFT_ANGELBRACEKET')
        secure_str = secure_str.replace('&gt;', 'RIGHT_ANGELBRACEKET')
        return secure_str
    

    在完成HTML标签解析后应该逐行使用AngleBracketsReduction来还原'<'和 '>'

    def AngleBracketsReduction(secure_str):
        unsecure_str = secure_str.replace('LEFT_ANGELBRACEKET', '<')
        unsecure_str = unsecure_str.replace('RIGHT_ANGELBRACEKET', '>')
        return unsecure_str
    
  • 相关阅读:
    2012年互联网教育行业观察
    SharePoint 2013的简单介绍
    让Node.js在Azure上运行3
    让Node.js在Azure上运行2
    有一个字符串 "I am a good man",设计一个函数,返回 "man good a am I"。
    json序列化与反序列化
    golang连接mysql数据库进行查询
    简单的WCF服务
    百钱买百鸡问题
    大叔程序员的第九天 @广播启动Activity
  • 原文地址:https://www.cnblogs.com/c4isr/p/6295981.html
Copyright © 2011-2022 走看看