Python3 爬虫编写报错及解决方法整理

将爬虫运行过程中遇到的错误进行整理,方便后来查询
运行环境:Python3.6+Pydev

编码错误

运行时候报错:UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\u2022’ in position 16707: illegal multibyte

分析:看描述是编码方面的问题;
解决方法:项目—>属性

设置属性
将编码改成utf-8
改变内部编码
运行程序,问题解决。

再爬小说网站的时候,报错:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xc1 in position 183: invalid start byte

分析:还是编码方面的问题,这次和上一个不同的是utf-8看来不行;
解决方法:改成GBK试一试

html = urllib.request.urlopen(req).read().decode('GBK')

刚看到一篇文章,对这些编码问题分析解决进行了归纳,很多方法值得借鉴

UnicodeEncodeError: ‘gbk’
其中讲了一个比较好的方法
将原先的utf-8的字符转换为Unicode的时候,其实更加安全的做法,也可以将:

titleUni = titleHtml.decode(“UTF-8”);

替换为:

titleUni = titleHtml.decode(“UTF-8”, ‘ignore’);

这样可以实现,即使对于那些,相对来说是无关紧要的一些特殊字符,也可以成功编码,避免编码出错,提高程序的健壮性。

unicode中的‘\xa0’字符在转换成gbk编码时会出现问题,gbk无法转换’\xa0’字符。

所以,在转换的时候必需进行一些前置动作:

string.replace(u'\xa0', u' ')  

将’\xa0‘替换成u’ ‘空格。

关于urllib

1、在获取网易公开课_视频链接 的爬虫代码里,看到这样的写法

key = urllib.parse.quote(keyword)  

知乎上的解释是:

作者:黑猫
链接:https://www.zhihu.com/question/26610759/answer/34189326
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

urllib 库中的 quote? 在 Python2.x 中的用法是:

urllib.quote(text)

Python3.x 中是

urllib.parse.quote(text)

按照标准, URL 只允许一部分 ASCII 字符(数字字母和部分符号),其他的字符(如汉字)是不符合 URL 标准的。所以 URL 中使用其他字符就需要进行 URL 编码。URL 中传参数的部分(query String),格式是:name1=value1&name2=value2&name3=value3
假如你的 name 或者 value 值中有『&』或者『=』等符号,就当然会有问题。所以URL中的参数字符串也需要把『&=』等符号进行编码。URL编码的方式是把需要编码的字符转化为 %xx 的形式。通常 URL 编码是基于 UTF-8 的(当然这和浏览器平台有关)。例子:比如『我』,unicode 为 0x6211, UTF-8 编码为 0xE6 0x88 0x91,URL 编码就是 %E6%88%91
在 JavaScript 中,提供了 encodeURI 和 encodeURIComponent 两种方法对 URL 进行编码;Python 的 urllib 库中提供了 quote 和 quote_plus 两种方法。因为是针对不同场景设计,以上四种方法编码的范围均不相同,比如 quote 除了 -._/09AZaz ,都会进行编码。quote_plus 比 quote 『更进』一些,它还会编码 /urllib.quote
使用参考:21.8.1. URL Parsing

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值