您的位置:首页 > 编程语言 > Python开发

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

2017-02-18 12:41 295 查看
将爬虫运行过程中遇到的错误进行整理,方便后来查询

运行环境: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 爬虫