爬虫过程中经常遇到的一些棘手问题

先写一些已经遇到,并已解决的,后面慢慢增添:

1.中文字符串前面加u,让字符串可以正常输出为中文:

 有时候我们从其它地方接受的字符串经过艰难跋涉,它变了个样。比如收到的是'\u6253\u602a\u8005'而不是u'\u6253\u602a\u8005'。
明明肉眼看起来只需要加个u,但是怎么加呢?
>>s = '\u6253\u602a\u8005'
>>s
'\\u6253\\u602a\\u8005'
>>'u'+s
'u\\u6253\\u602a\\u8005'
这样不行。
而且表面看起来是'\u6253\u602a\u8005',其实内部是'\\u6253\\u602a\\u8005',就是转义了反斜杠,有2个斜杠,而我要的是\u而不是 \\u。
这时喜欢用黑魔法的可能会想到eval。
>>eval('u"'+s+'"')
u'\u6253\u602a\u8005'
>>print eval('u"'+s+'"')
打怪者

嗯,没错,用eval可以。不过这样实现太蛋疼了。
python就自带了解决方法。就是 unicode-escape。
>>unicode(s,'unicode-escape')
u'\u6253\u602a\u8005'

另外,还有个跟unicode-escape齐名的东西,叫 string-escape。它的作用可以说是“去掉转义,把2个反斜杠变成1个”。看例子。
>>s = 'hello\\nworld'
>>s
'hello\\nworld'
>>s.decode('string-escape')
'hello\nworld'

2.转码显示非法字符问题

a=a.decode('gbk','ignore')

将字符串a 从gbk码转换为unicode,'ignore'的作用为强制转换,忽略全角等不可见字符(可能不太准确)。

3.xpath 解析内容为空。

这儿是在,xpath表达式书写正确的前提下,xpath解析结果为空,也不报错。

           问题遇到的地方:“应届生求职网“,因页面太过复杂,特采用,解析页面全部文本的方式。
           问题原因:页面源码编码为gbk,因我事先将页面源码转换成了utf-8,导致xpath解析不出来。

           因为xpath解析只能解析unicode编码


4.正则匹配,匹配内容包含“\”,例如:<a href=\"http:\/\/www.baidu.com\">,如果要匹配出里面的www.baiud.com正则表达式可能就需要'\\\\"(.*?)\\\\" '也就是说,出现一个反斜杠,前面就需要三个反斜杠来转义,当然,也可以用别的方法例如:replace('\"','"')现将字符串进行预处理,再去进行正则匹配,但是一定要小心误替换。

5.chardet检测字符串编码,如果字符串本身就是unicode码,那莫程序就会报错。

6.json.loads()一个看似标准的json格式的字符串,,如果字符串本身是格式化json(检测地址http://www.bejson.com/)字符串,并不缺少花括号,但是loads报错,可能是因为字符串开头包含非法字符,,检测方法:将字符串加入一个空列表,然后将列表输出,例如:json_src ,a=[],a.append(json_src),print a ,解决方式:json_src=json_sec.split()[-1],现在的json_src就是一个可以loads的标准json字符串了。





  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值