微信小程序> python实战,用爬虫和GUI做一个小程序

python实战,用爬虫和GUI做一个小程序

浏览量:1894 时间: 来源:hichcock_tian

写在前面的话
最近各种负面消息,对爬虫er来说,并不是很友好,当然这个是对于从业者来说的,对像我这样的正在学习python的个人来说,python爬虫的学习只需要保持以下几点,基本不会出现大的问题:
遵守Robots协议(额,尽量遵守吧)
优化代码,不对服务器造成影响为最佳(暴力爬取会严重影响网站的日常访问,最好加入时间间隔)
敏感数据不要碰(个人隐私、付费数据等等敏感数据,不要去碰,大部分的违法行为就是因为没有遵守这点……)
数据量不要太大(毕竟是学习阶段,能抓到几页数据就可以了,不要批量的抓取大量的数据,对大多数的学习者来说,几遍抓到了大量的数据,也没有更好的用途,那么也就没什么用了!)
进入正题
今天给大家分享的是,制作一个基于爬虫的小程序,实现快速查询IP的功能。
使用的工具为python3.6和pycharm,模块:requests库、tkinter库(GUI)、lxml库
先来看看网页是什么样子的
小程序
打开主页后,网页会自动显示你的IP及所在的地理位置(上图红色覆盖部分),然后在上方填入待查询的IP,点击查询后,抓包看看返回的内容
小程序
可以看到,这里返回了一个html内容,我们直接抓这个包就可以,只需要在url上将待查询的ip加到url后面就可以了。
开始写代码
首先,先写tk的框架
小程序
小程序
具体功能不一一讲了,大家可以自行在网上找到tk的教程,这里就说一下大概的思路和数据的传入:首先是做出大的框架,然后从上往下依次写各个功能模块,第33行,这里用一个函数获取本机的IP和位置,数据从网页抓出,函数截图如下:
小程序
返回一个列表,然后在34和36行依次导入,显示在程序内,为了显眼一些,加入背景颜色。42行为输入待查询的IP,并在第44行的按钮中绑定查询按钮,在函数中直接显示在Listbox模块中,对应的函数截图如下:
小程序
ps:代码中用f-string方法来格式化字符串,具体使用方法大家可以去看看我的其他文章,里面有详细说明。
最终效果如下:
小程序
后记
后来,用pyinstaller打包生成exe文件,但是出现了报错,最后的退出部分出现了错误
小程序
然后将退出按钮函数修改为exit,打包后依然报错
小程序
后来修改了一下退出按钮的函数,将command的值修改为sys.exit,就可以了

bton = Button(root, text=“退出”,width =40,command=sys.exit)

可能是在Windows下运行程序,quit或者exit不能直接用于退出程序,导致的报错。
整个代码不到50行搞定,爬虫部分甚至不到10行,在这方面,python依然是很有优势的!

我自己修改后的代码:

#encoding=utf-8from tkinter import *import sys,requestsimport lxml.htmletree = lxml.html.etree #想使用etree在python3中需要这样写root=Tk()root.title("IP地址查询") #窗口标题root.geometry('380x220+600+50') #窗口大小位置label1=Label(root,text="---------------------------------------------------------------------------")label1.grid(row=0,columnspan=3)def get_ip(): #显示本机IP    url="https://ip.cn"    html=requests.get(url).text    info=etree.HTML(html).xpath('//div[@id="result"]/div/p/code/text()')    return infodef get_info():    url=f"https://ip.cn/index.php?ip={entry.get()}"    html=requests.get(url).text    infos=etree.HTML(html).xpath('//div[@class="well"]/p/code/text()')    #print(infos)    if infos:        text.insert(END,'您所查询的IP是:%s'%infos[0]) #添加查询的结果        text.insert(END,'它的地理位置是在:%s'%infos[1])        text.see(END)        text.update()    else: #如果没有结果输出页面提示        infos=etree.HTML(html).xpath('//div[@class="well"]/text()')        #text.delete(1.0,END)        infos=infos+['']        text.insert(END,infos[0])        text.insert(END,infos[1])        text.see(END)        text.update()iplabel=Label(root,text="您本机的IP是:")iplabel.grid(row=1,column=0)info=get_ip()iplabel1=Label(root,text=f"{info[0]}",bg='yellow')iplabel1.grid(row=1,column=1)iplabel2=Label(root,text=f"{info[1]}",bg='yellow')iplabel2.grid(row=1,column=2)label2=Label(root,text="---------------------------------------------------------------------------")label2.grid(row=2,columnspan=3)inquirelb1=Label(root,text="您要查询的IP:")inquirelb1.grid(row=3,column=0)entry=Entry(root)entry.grid(row=3,column=1)inquirebton=Button(root,text="查询",width=8,command=get_info) #查询按钮inquirebton.grid(row=3,column=2)text=Listbox(root,font=("微软雅黑",10),width=25,height=2,fg="red") #结果显示text.grid(row=4,columnspan=3,padx=10,pady=10)bton=Button(root,text="退 出",width=30,command=sys.exit)bton.grid(row=5,columnspan=3)root.mainloop()

打包成exe可执行文件
打包使用了pyinstaller模块
使用python -m pip install pyinstaller
cmd模式下,进入py文件路径,使用pyinstaller ipinquire.py命令打包
小程序
小程序
打包后文件夹
小程序
可执行文件在dist文件夹下
小程序

小程序

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎