标签:xpath class 需要 爬虫 vcl 源码 google 替换 sub
经常做爬虫的人,应该对\x00、\x01这样的字符不陌生,网页源码里面 不经常 出现。不过一般都不深究这到底是啥。一开始我也没研究,发现之后就拿正则替换掉,简单粗暴的处理。之所以要去掉,是因为使用Python的lxml库处理的时候会抛异常。再后来,由于需要做一个通用一些的采集器,没办法再无视这个问题了,于是Google一番之后,Copy了一段代码:
text = re.sub("[\x00-\x1F\x7F]\s*", "", text)
不错,测试下来运行良好。完美去掉了所有控制字符。只是好景不长,过了几个月,在排查一个Xpath解析问题的时候,突然发现这段代码有很大问题。。。
以下内容抄自维基百科:https://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%AD%97%E7%AC%A6
控制字符,是出现在特定的信息文本中,表示某一控制功能的字符。
好吧,这个东西最开始设计是为了给打印机用的。。。 ,现在的话,很多控制字符感觉都没啥用了。简单举几个例子:
其他的就看Wiki吧,写的挺清楚的。
例子中的这几个之所以列出,是因为我遇到的问题就是他们几个引起的。一般的网页源码中,存在的\t、\r、\n等字符,都是用来调整样式的,对数据没啥影响。但是今天就碰到了很坑的网站。它是这么写源码的:
<div\nclass='content'>.....</div>
卧槽。竟然用\n而不是空格来分割标签名与属性。(顺便说一句。空格是\x20,但不是控制字符)
于是。我抄的正则就有问题了。把\n给替换掉了之后,源码就变成了
<divclass='content'>.....</div>
这还怎么解析。。。
于是修改正则如下:
text = re.sub("[\x00-\x08\x11\x12\x14-\x1F\x7F\x80-\x9F]", "", text)
跳过了这几个常用字符。完美收工。
感觉应该、也许、大概、可能不会再出问题了吧!
标签:xpath class 需要 爬虫 vcl 源码 google 替换 sub
原文地址:https://www.cnblogs.com/dyfblog/p/12146962.html