Python3 爬虫编写报错及解决方法整理
2017-02-18 12:41
295 查看
将爬虫运行过程中遇到的错误进行整理,方便后来查询
运行环境:Python3.6+Pydev
解决方法:项目—>属性
将编码改成utf-8
运行程序,问题解决。
解决方法:改成GBK试一试
其中讲了一个比较好的方法
将原先的utf-8的字符转换为Unicode的时候,其实更加安全的做法,也可以将:
替换为:
这样可以实现,即使对于那些,相对来说是无关紧要的一些特殊字符,也可以成功编码,避免编码出错,提高程序的健壮性。
将’\xa0‘替换成u’ ‘空格。
知乎上的解释是:
作者:黑猫
链接:https://www.zhihu.com/question/26610759/answer/34189326
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
urllib 库中的 quote? 在 Python2.x 中的用法是:
Python3.x 中是
按照标准, 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
运行环境: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错误和解决方法汇总整理
- Python 爬虫 URL中存在中文或特殊符号无法请求的解决方法
- python3.6+selenium+phantomJS 网页爬虫报错NoSuchElementException问题及解决方法
- [读书笔记]python爬虫-scrapy安装过程常见问题及解决方法
- python编写汉诺塔小游戏解决方法
- python3 request 爬虫 httplib.IncompleteRead() 问题的简单解决方法
- Scrapy爬虫,Python2将Unicode编码装换成UTF-8编码解决方法之一
- 自己编程中遇到的Python错误和解决方法汇总整理
- python爬虫爬到的字符串带\u的解决方法
- Python——问题解决方法整理
- 使用IDLE编写Python程序出现汉字横着显示的解决方法(附删除键空格消除)
- Python爬虫模拟登录失败,重定向到登录页面解决方法。
- python爬虫,selenium使用,Firefox-chrome-IE问题解决方法,selenium的基本操作
- 编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
- Python -bs4反爬虫解决方法
- Python 编写新浪新闻网络爬虫(学习整理)
- python反爬虫解决方法——模拟浏览器上网
- 用python编写ASP脚本时遇到的问题,初步的解决方法,目前正在寻找更好的解决办法。
- python爬虫headers设置后无效的解决方法
- python3写爬虫程序时,遇到的问题及解决方法