前言

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:番茄哈哈

ps:如有需要python学习资料的小伙伴可以加点击下方链接自行获取

这次准备介绍python爬虫爬取网页数据、解析并应用于实践,打算写几篇文章,从最基础的python爬虫语法开始介绍爬虫,步步深入,最终实现一个较完整的实例。

这一系列文章包括:

request库介绍及应用

beautifulsoup库介绍及应用

正则表达式匹配及应用

对话机器人实例

tkinter库制作界面以及python程序打包成可执行exe文件

本篇文章主要给出我最后做出来的一个可运行exe应用的展示,主要的目的是提高阅读者学习的兴趣。

最后做出来的聊天机器人可以根据用户输入的指令在指定网站爬取信息,并在后台解析,返回结果输出到界面。

我将这个exe应用放在了最后,可直接在电脑运行的文件,大家可以下载自己玩或者发给好友秀一下。

运行截图入下:

用户可以输入指令,例如:“给我讲个笑话”,“给我讲个段子”,“在网上给我找句晚安的话”等。如下:

我用的开发工具是spyder,在后续的文章中我会逐渐深入的讲解这个例子的原理以及实现方法。

下面附上代码,感兴趣的同学可以拷贝自己运行试一下。

1 from tkinter import *

2 import time

3 import requests

4 from bs4 import beautifulsoup

5 import bs4

6 import random

7 import re

8 def gethtmltext(url):

9 try:

10 r = requests.get(url, timeout=30)

11 r.raise_for_status()

12 #r.encoding = r.apparent_encoding

13 return r.text

14 except:

15 print("faile")

16 return ""

17 ​

18 def fillunivlist(ulist, html):

19 soup = beautifulsoup(html, "html.parser")

20 for tr in soup.find_all('article'):

21 if isinstance(tr, bs4.element.tag):

22 tds = tr('a')

23 ulist.append([tds[0].string, tds[1].string, tds[2].string])

24 def printunivlist(ulist,k):

25 return ulist[k][0]

26 ​

27 def getduanzi():

28 uinfo = []

29 k=1

30 u = 'http://duanziwang.com/category/%e4%b8%80%e5%8f%a5%e8%af%9d%e6%ae%b5%e5%ad%90/'

31 i=random.randint(1,49)

32 url=u+str(i)+'/'

33 html = gethtmltext(url)

34 fillunivlist(uinfo, html)

35 k=random.randint(0,9)

36 return printunivlist(uinfo,k)

37 def fill2(ulist,html):

38 soup = beautifulsoup(html, "html.parser")

39 for tr in soup.find_all('div','article block untagged mb15 typs_hot'):

40 if isinstance(tr, bs4.element.tag):

41 tds = tr.find('div','content')

42 tdss=tds('span')

43 reg = re.compile(']*>')

44 text=reg.sub('',str(tdss))

45 regg = re.compile('\\[|\\]|\\n')

46 text=regg.sub('',text)

47 ulist.append(text)

48 def getjoke():

49 ulist=[]

50 u='https://www.qiushibaike.com/text/page/'

51 i=random.randint(1,13)

52 url=u+str(i)+'/'

53 html=gethtmltext(url)

54 fill2(ulist,html)

55 k=random.randint(0,16)

56 #print(str(ulist[k]))

57 return str(ulist[k])

58 def gethtmltext2(url):

59 try:

60 r = requests.get(url, timeout=30)

61 r.raise_for_status()

62 r.encoding = r.apparent_encoding

63 return r.text

64 except:

65 return ""

66 def geturl(url,text):

67 html=gethtmltext2(url)

68 soup = beautifulsoup(html, "html.parser")

69 for tds in soup.find_all('a'):

70 #print(tds.string)

71 if str(tds.string) in text:

72 #print(tds.attrs['href'])

73 return tds.attrs['href']

74 return ''

75 def getmoreurl(url):

76 html=gethtmltext2(url)

77 soup = beautifulsoup(html, "html.parser")

78 try:

79 li=soup.find_all('li',attrs={'class':'articletitle fl'})

80 k=random.randint(0,len(li)-1)

81 return li[k]('a')[0].attrs['href']

82 except:

83 return ''

84 def getsen(url):

85 html=gethtmltext2(url)

86 soup = beautifulsoup(html, "html.parser")

87 try:

88 li=soup.find('p')

89 reg = re.compile('

.*')

90 l=reg.findall(str(li))

91 #print(l)

92 k=random.randint(0,len(l)-1)

93 text=re.findall('[\u4e00-\u9fa5]+',l[k])

94 x=''

95 if len(text):

96 for t in text[:-2]:

97 x=x+t+','

98 return x+text[-1]+'。'

99 else:

100 return "不好意思,出了点小问题,请重试!"

101 except:

102 return "抱歉,没找到你想要的"

103 def getsentance(text):

104 start_url = 'http://www.siandian.com'

105 urll='http://www.siandian.com/tags.html'

106 end1=geturl(urll,text)

107 if end1=='':

108 return "抱歉,没有找到你想要的。"

109 else:

110 end2=getmoreurl(start_url+end1)

111 if end2=='':

112 return "抱歉,没有找到你想要的。"

113 else:

114 #print(start_url+end2)

115 return getsen(start_url+end2)

116 def xiaotang(s):

117 sign=1;

118 while(sign):

119 if '段子' in s:

120 while('段子' in s or '继续' in s or '再来' in s or s==''):

121 return getduanzi()

122 elif '笑话' in s:

123 while('笑话' in s or '继续' in s or '再来' in s or s==''):

124 return getjoke()

125 elif '句' in s or '话' in s:

126 return getsentance(s)

127 elif '傻子' in s or '草' in s or '日' in s:

128 return '这是脏话不可以说哦'

129 elif '二' in s or '垃圾' in s or '傻逼' in s:

130 t='你是魔鬼吗?'

131 x=''

132 for i in range(10):

133 x=x+t+' !'+'\n'

134 return x

135 else:

136 return "我好像不明白\n"

137 def main():

138 def start():

139 strmsg = '小糖:' + time.strftime("%y-%m-%d %h:%m:%s",

140 time.localtime()) + '\n '

141 txtget.insert(end, strmsg, 'redcolor')

142 txtget.insert(end, '你好,请问有什么可以帮忙的?')

143 def sendmsg():#发送消息

144 t=txtmsg.get('0.0', end)

145 txtmsg.delete('0.0', end)

146 strmsg = '我:' + time.strftime("%y-%m-%d %h:%m:%s",

147 time.localtime()) + '\n '

148 for i in range(int(txtget.index(end).split(".")[0])-int(txtmsglist.index(end).split(".")[0])+1):

149 txtmsglist.insert(end, '\n')

150 txtmsglist.insert(end, strmsg, 'greencolor')

151 txtmsglist.insert(end, t)

152 txtmsglist.see(end)

153 for i in range(int(txtmsglist.index(end).split(".")[0])-int(txtget.index(end).split(".")[0])+1):

154 txtget.insert(end, '\n')

155 txtget.see(end)

156 ​

157 ​

158 ​

159 strmsg = '小糖:' + time.strftime("%y-%m-%d %h:%m:%s",

160 time.localtime()) + '\n '

161 for i in range(int(txtmsglist.index(end).split(".")[0])-int(txtget.index(end).split(".")[0])+1):

162 txtget.insert(end, '\n')

163 txtget.insert(end, strmsg, 'redcolor')

164 txtget.insert(end, xiaotang(t))

165 txtget.see(end)

166 for i in range(int(txtget.index(end).split(".")[0])-int(txtmsglist.index(end).split(".")[0])+1):

167 txtmsglist.insert(end, '\n')

168 txtmsglist.see(end)

169 ​

170 ​

171 def cancelmsg():#取消消息

172 txtmsg.delete('0.0', end)

173 ​

174 def sendmsgevent(event): #发送消息事件

175 sendmsg()

176 ​

177 #创建窗口

178 t = tk()

179 t.title('小糖助手')

180 ​

181 #创建frame容器

182 frmlt = frame(width=500, height=320, bg='#f19c8b')

183 frmlc = frame(width=500, height=150, bg='#f19c8b')

184 frmlb = frame(width=500, height=30,bg='white')

185 frmrt = frame(width=200, height=500,bg='#f19c8b')

186 ​

187 #创建控件

188 txtmsglist = text(frmlt,width=40,bd=0)

189 txtmsglist.tag_config('greencolor', foreground='#008c00')#创建tag

190 txtmsg = text(frmlc)

191 txtget = text(frmlt,width=40,bd=0)

192 txtget.tag_config('redcolor', foreground='#dc143c')#创建tag

193 start()

194 #txtmsg.bind("", sendmsgevent)

195 txtmsg.bind('',sendmsgevent)

196 btnsend = button(frmlb, text='发 送', width = 8, command=sendmsg,bg='#e88384',bd=0)

197 btncancel = button(frmlb, text='取消', width = 8, command=cancelmsg,bg='#f3ada0',bd=0)

198 scollor=scrollbar(bg='white')

199 scollor.config(command=txtget.yview)

200 scollor.config(command=txtmsglist.yview)

201 txtget.config(yscrollcommand=scollor.set)

202 txtmsglist.config(yscrollcommand=scollor.set)

203 imginfo = photoimage(file = "aa.png")

204 lblimage = label(frmrt, image = imginfo)

205 lblimage.image = imginfo

206 ​

207 #窗口布局

208 frmlt.grid(row=0, column=0, columnspan=2, padx=0, pady=0)

209 frmlc.grid(row=1, column=0, columnspan=2, padx=0, pady=0)

210 frmlb.grid(row=2, column=0, columnspan=2,padx=0)

211 scollor.grid(row=0,column=2,sticky=n+s)

212 frmrt.grid(row=0, column=3, rowspan=3, padx=0, pady=0)

213 #固定大小

214 frmlt.grid_propagate(0)

215 frmlc.grid_propagate(0)

216 frmlb.grid_propagate(0)

217 frmrt.grid_propagate(0)

218 ​

219 btnsend.grid(row=2, column=0)

220 btncancel.grid(row=2, column=1)

221 lblimage.grid()

222 txtget.grid(row=0,column=0)

223 ​

224 txtmsglist.grid(row=0,column=1)

225 ​

226 txtmsg.grid()

227 ​

228 #主事件循环

229 t.mainloop()

230 ​

231 if __name__ == '__main__':

232 main()

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

python段子_让Python给你讲笑话、段子,一个有趣的Python案例相关推荐

  1. python趣味编程表白_【暖心一笑】Python趣味编程:定时给Ta讲笑话

    原标题:[暖心一笑]Python趣味编程:定时给Ta讲笑话 大四的生活就是这么无聊,我琢磨着也学了这么多东西了,为啥不能用自己的知识来给生活找点乐子呢?我想反正每天都要给Ta问候一声早安,为何不同时讲 ...

  2. python箴言_字字箴言:为什么我劝你别盲目追风 Python?

    Python的火不容置疑! 2018年起,凭借应用广效率高的特点,Python将 Java 和 C++甩出身后,很多人开始学习Python,那么你跟风了吗? 笔者整理一些内容,希望能帮你有效辨别,你是 ...

  3. 风变编程python助教_花30天时间,学完了风变编程Python基础语法课

    原标题:花30天时间,学完了风变编程Python基础语法课 20节实打实的课程,1个月时间,我终于学完了风变编程的Python基础语法课.刚开始学的时候,就有人问我感受怎么样,当时本着未知全貌不予置评 ...

  4. 高一信息技术课件python编程_教科版高中信息技术选修第一章第三节Python入门--奇妙曲线的绘制 课件(22张ppt) 教案 (2份打包)...

    ID:10986924 资源大小:11671KB 资料简介: 教学设计 [课程标准要求] 体验算法思想,了解算法和程序设计在解决问题过程中的地位及作用:能从简单的问题出发,设计解决问题的算法,并能初步 ...

  5. 计算机语言python发音_最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...

    原标题:最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几 在很多人眼里程序员的标配就是黑框眼镜+格子衫+双肩包+牛仔裤+运动鞋,拥有了这些可能就被判定为一个程序员. 而如何判定一个程 ...

  6. python证券_又到牛市!带你学习一个python强大证券数据分析工具

    前言 A股市场随着这段时间的火热翻腾,牛市又要降临的样子!如何能找出价值和价格匹配,还未被热炒的低估股票?还是来识别价值和价格已然背离的虚火股票?无疑,通过股票本身指标来找是很靠谱的.但这些指标计算复 ...

  7. 风变编程python课_花30天时间,学完了风变编程Python基础语法课

    原标题:花30天时间,学完了风变编程Python基础语法课 20节实打实的课程,1个月时间,我终于学完了风变编程的Python基础语法课.刚开始学的时候,就有人问我感受怎么样,当时本着未知全貌不予置评 ...

  8. 来闯关吗?一个有趣的 Python 解谜网站!我已经懵逼了!

    这一期的话题是:一个学习 Python 的趣味网站 . 最近在网上看到一个非常有意思的 Python 游戏通关网站,一共有 33 关,每一关都需要利用 Python 知识解题找到答案,然后进入下一关. ...

  9. swift和python哪个好_单从语法角度讲,Swift 完爆 Java Python 和 C#吗?

    语法嘛 想了半天,就是空安全和扩展? 这两个被dart和kotlin所借鉴了 其他的,港真,应该是生态取胜 我要在swiftui里面做一个metal的渲染view,非常容易,java就难很多,要pro ...

最新文章

  1. 对于5G通信 我们可能都有一点误解
  2. java 无符号转有符号_java有符号无符号的转换
  3. UML工具 MAGICDraw
  4. 遇到奇怪的C#/C/C++或者Java的bug可以去问问Coverity
  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(47)-工作流设计-补充
  6. python的优缺点有哪些-python的优缺点有哪些
  7. linux kernel的问与答
  8. ORACLE TEXT DATASTORE PREFERENCE(七)
  9. 使用建造者模式创建模拟数据
  10. linux shell之字符串的更具字符分割和删除字符和文本内容的删除以及内容是否匹配成功
  11. 2018/7/17-纪中某C组题【jzoj4024,jzoj4025,jzoj2136,jzoj2137】
  12. 2020 年最新版 68 道Redis面试题,20000 字干货,赶紧收藏起来备用!
  13. 【记录】利用jar包制作docker镜像
  14. python OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized
  15. html 解析 qt,windows下用QTwebkit解析html
  16. 【毕设】ASP.net校友录毕业设计(源代码+论文+开题报告+答辩PPT)
  17. matplotlib画子图subplot
  18. python课程设计实验报告-Python语言课程设计报告格式.doc
  19. 软件测试(四)——正交实验法、功能图法、其他测试用例设计方法等
  20. 小记(1)偷影子的人

热门文章

  1. web项目怎么在服务器启动不了了,“无法启动IIS Express Web服务器”的解决办法
  2. 【转】CNN+BLSTM+CTC的验证码识别从训练到部署
  3. android环形list,一个非常精美的Flutter Todo-List项目
  4. QQ被盗了的可以这样搞回来
  5. js页面跳转参考代码大全
  6. echarts实现矩阵图(线性相关图)
  7. CSS 引入和 Script 引入的方式
  8. 非酋用计算机,《神武4》电脑版:洗宠100次必变异 再也不用流非酋泪
  9. 计算机和应用相对指标应注意,0302相对指标的种类及计算方法.doc
  10. 2022-2028年中国电子铝箔行业市场发展现状及竞争格局预测报告