本次实战学习参考了 静觅的文章:http://cuiqingcai.com/990.html
总结注意点:
1 适当在代码中加入一些print语句,可以提高代码的可调试性。
2 正则表达式的匹配利用了 () 的分组和 .*? 的非贪婪,十分方便。之前看视频学习时学到一个技巧“先抓大再抓小”,到这里反而没分组方便!
3 Python中的逻辑运算符是遵循 “短路逻辑” 的,x or y,如果x为真,那么结果为x,如果x为假,那么结果为y。也就是说值是由决定表达式的值得那个变量。使用时一定要注意!
4 Python的类中的属性(变量)和方法(函数)在类中被使用时要注意添加self。 self是实例对象的唯一标志!
未解决问题(各位路过的Python友,如果有知道答案的,麻烦留言解答一下,谢谢了哈):
1 如果get_jokes 函数中的正则表达式稍微修改下,不能让其正常匹配,程序运行时则会卡在 items=pattern.findall(items) 这一句。 不知道是什么原因??
2 每次按空格输出一个段子的信息,某次就会出现 UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\u200e’ in position 的错误。尝试了如下方法:
(1) html = r.content #而不是 r.text。但是这样获得的html是二进制文件,re.findall时会报错!TypeError: can't use a string pattern on a bytes-like object
(2)r.encoding = "utf-8"
html = r.text #查看网页的编码格式是utf-8,于是encoding为 utf-8,使得获取源代码时为 utf-8的编码格式,但是仍然会出现 UnicodeEncodeError 问题
整体代码如下: