本文最后更新于 694 天前,其中的信息可能已经有所发展或是发生改变。
正在做下一个小程序的数据部分,部分数据需要从网上扒下来。从网上找到一个专门爬单词的程序,原程序的地址在这里。当然源程序一点问题都没有,在 Python3 下完美运行。只不过源程序爬的是英语单词,ascii 码在 Python 中就是常用字符;然而我爬取的数据中有法语特殊字符,这样就导致了下面这个问题。
下图中,当网址和正常的 ascii 字符的单词组合在一起时,能够正常地获取到数据;而当网址和特殊字符组合在一起时,便会出现错误,终止程序的运行。
具体错误如下图所示:
然后不论我怎么去改变各种变量的 encode 或者 decode 或者是从 stackoverflow 上找的一些解决方法都无济于事。甚至还有改变环境变量的,比如在系统的环境变量中加入这一条:PYTHONIOENCODING = utf-8
不过都测试过了,都没有效果。直到看到了下面这点代码,原网站查看这里。首先在开头引入 from urllib import parse 以及 import urllib。然后在特殊字符变量的外面加上一个 urllib.parse.quote。
在之后的测试中还会出一些小问题,不过这个因人而异:比如,我的是每个单词换行隔开,这里会有一个隐形的换行符,%0A (LF line feed %0A),这时需要适当的加工处理了。
from urllib import parse
import urllib
key = '测试'
encoded_url = 'https://xd.sh.cn/'+urllib.parse.quote(key)+'?q='+urllib.parse.quote(key)+'&typeall=1&suball=1&timescope=custom:2017-12-15:2017-12-18&Refer=g&page='
print(encoded_url)
参考资料
- https://stackoverflow.com/questions/31690180/html-not-reading-0a
- https://stackoverflow.com/questions/22734464/unicodeencodeerror-ascii-codec-cant-encode-character-xe9-when-using-ur
- https://stackoverflow.com/questions/9942594/unicodeencodeerror-ascii-codec-cant-encode-character-u-xa0-in-position-20* https://blog.csdn.net/da___vinci/article/details/85753875
- https://github.com/ztjryg4/querymorewords