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  短袖圆领衫, 体恤衫 买一件 吧 
     
  • 相关阅读:
    ASP.NET——From验证:全部代码及讲解
    JavaScript 经典代码大全:有 目录 及 编号 的哦 !
    很好的一首英文歌曲:不论是旋律、还是歌词或者MV
    2007年10月份_很想念大家
    NND,8月没有来发贴,现在是9月了,要发一个
    买了一个新的域名和主机,呵呵,
    视频下载:HTML基础及应用
    简单的哲理,放在最上面,提醒自己
    学的东西忘记得差不多啦......
    欲找情人 要做哪些准备?
  • 原文地址:https://www.cnblogs.com/hsinfo/p/13602104.html
Copyright © 2011-2022 走看看