zoukankan      html  css  js  c++  java
  • 网页爬虫中xa0、u3000等字符的解释及去除

    xa0表示不间断空白符,爬虫中遇到它的概率不可谓不小,而经常和它一同出现的还有u3000u2800 等Unicode字符串。单从对xa0 u3000等含空白字符的处理来说,有以下几种方法可行:
    使用re.sub

    使用正则表达式可以轻松匹配所有空白字符,它对于Unicode字符也是有效的,比如:

    import re
    s = 'T-shirtxa0xa0短袖圆领衫,u3000体恤衫xa0买一件	吧'
    re.sub('s', ' ', s)
    
    #T-shirt  短袖圆领衫, 体恤衫 买一件 吧

    不过该正则表达式会对所有字符都进行统一处理,可能会与原页面展示效果有所出入。

    使用translate方法

    str对象的translate方法也是去除这些字符串的好帮手,该方法具体用法可参考Python标准库,本处使用示例如下:

    inputstring = u'
                   Door:xa0Novum    	'
    move = dict.fromkeys((ord(c) for c in u"xa0
    	"))
    output = inputstring.translate(move)
    output
    # Door:Novum  
    利用split方法

    将字符串分割再重组,这时候空白字符就会被pass掉了,不过该方法杀伤力太大,会导致所有空白消失,一定要慎用。
    使用示例:

    s = 'T-shirtxa0xa0短袖圆领衫,u3000体恤衫xa0买一件	吧'
    ''.join(s.split())
    # T-shirt短袖圆领衫,体恤衫买一件吧
    使用unicodedata模块

    Python标准库的unicodedata模块提供了normalize方法将Unicode字符转换为正常字符,该方法可算是处理这类情况最好的方法了,它会让字符回归到我们期望看到的样子,同时不损害其它正常的空白字符,而且还能还原其它非空白字符。normalize第一个参数指定字符串标准化的方式。 NFC表示字符应该是整体组成(比如可能的话就使用单一编码),而NFD表示字符应该分解为多个组合字符表示。Python同样支持扩展的标准化形式NFKCNFKD,它们在处理某些字符的时候增加了额外的兼容特性。使用该方法处理xa0等字符的示例如下:

    import unicodedata
    s = 'T-shirtxa0xa0短袖圆领衫,u3000体恤衫xa0买一件	吧'
    unicodedata.normalize('NFKC', s)
    # T-shirt  短袖圆领衫, 体恤衫 买一件 吧 
     
  • 相关阅读:
    Notes about "Exploring Expect"
    Reuse Sonar Checkstyle Violation Report for Custom Data Analysis
    Eclipse带参数调试的方法
    MIT Scheme Development on Ubuntu
    Manage Historical Snapshots in Sonarqube
    U盘自动弹出脚本
    hg的常用配置
    Java程序员的推荐阅读书籍
    使用shared memory 计算矩阵乘法 (其实并没有加速多少)
    CUDA 笔记
  • 原文地址:https://www.cnblogs.com/hsinfo/p/13602104.html
Copyright © 2011-2022 走看看