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
    
  • 相关阅读:
    NOIP2011 D1T1 铺地毯
    NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并
    POJ 2513 trie树+并查集判断无向图的欧拉路
    599. Minimum Index Sum of Two Lists
    594. Longest Harmonious Subsequence
    575. Distribute Candies
    554. Brick Wall
    535. Encode and Decode TinyURL(rand and srand)
    525. Contiguous Array
    500. Keyboard Row
  • 原文地址:https://www.cnblogs.com/c4isr/p/6295981.html
Copyright © 2011-2022 走看看