一个WXPython+采集的 Demo

2024-03-01 09:18
文章标签 采集 demo wxpython

本文主要是介绍一个WXPython+采集的 Demo,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

# -*-coding:utf-8 -*-
# 勿喷,很早之前写着玩的
from __future__ import division
import wxversion,sys,os
wxversion.select('3.0-msw-unicode')
import wx,urllib,urllib2, base64,re,sys,os,time
reload(sys)
sys.setdefaultencoding('UTF-8')
encoding = "UTF-8"percent =0
#http://www.61ertong.com/plus/list.php?tid=10&TotalResult=1199	class ButtonFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, -1, 'Button Example',size=(600, 200),style =wx.DEFAULT_FRAME_STYLE ^ (wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)  | wx.CLIP_CHILDREN | wx.NO_FULL_REPAINT_ON_RESIZE)panel = wx.Panel(self, -1)self.count = 0self.btn_down = wx.Button(panel, -1, u"下载", pos=(200, 115))self.btn_exit = wx.Button(panel, -1, u"退出", pos=(320, 115))     self.url_text=wx.TextCtrl(panel,-1,'http://www.61ertong.com/flash/gequ/cngequ/show/f_60545.html',size=(450,-1),pos=(110, 45))self.Bind(wx.EVT_BUTTON, self.OnClickButton, self.btn_down)self.processBar = wx.Gauge(panel, -1, 100, pos=(110, 80),size=(420, 15), style = wx.GA_PROGRESSBAR)self.processBar.SetBezelFace(3)self.processBar.SetShadowWidth(3)self.Label_info=wx.StaticText(panel,-1,u"61儿童网地址:",pos=(20, 50))self.Label_proce=wx.StaticText(panel,-1,u"进度:",pos=(65, 80))self.Label_Url=wx.StaticText(panel,-1,u"" ,pos=(20, 20))self.Label_Percent=wx.StaticText(panel,-1,u"0",pos=(530, 80))self.Label_Flag=wx.StaticText(panel,-1,u"%",pos=(550, 80))'''前面一个是关掉弹窗,后面一个是关掉程序'''self.Bind(wx.EVT_BUTTON, self.OnClose, self.btn_exit)  self.Bind(wx.EVT_CLOSE, self.OnCloseWindow,self.btn_down)def OnClose(self, event):ret = wx.MessageBox(u'您确定要退出本程序吗',  u'WxPython Info', wx.OK|wx.CANCEL)# dlg = wx.MessageDialog(self, 'Hello from Python and wxPython!',# 'A Message Box',# wx.OK | wx.ICON_INFORMATION|wx.YES_NO | wx.NO_DEFAULT# )# dlg.ShowModal()# dlg.Destroy()if ret == wx.OK:self.Destroy()@staticmethoddef urlcallback(a,b,c):global obj per = 100.0 * a * b / cpercent = int(per)obj.processBar.SetValue(percent)obj.Label_Percent.SetLabel(str(percent))def OnCloseWindow(self, event):self.Close()def OnClickButton(self, event):url = self.url_text.GetValue()self.processBar.SetValue(1)		if url != '' :try:#最近不伪造header头采集不到#request = urllib2.Request(url)headers = {'User-Agent':'Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11'}req = urllib2.Request(url=url,headers=headers)socket = urllib2.urlopen(req)html_content = socket.read()socket.close()except Exception ,ex:print exwx.MessageBox(u"没有抓取到远程文件",u'WxPython Warning',wx.OK|wx.CANCEL|wx.ICON_ERROR)return '''默认都是抓Swf文件'''re_swf = re.compile('swfurl\:"(.*?)"',re.S|re.U|re.I)re_title = re.compile('<h1><a href="(.*)">(.*)</a><\/h1>',re.S|re.U)swfs = re.findall(re_swf,html_content)file_object = open('thefile.txt','w')try:file_object.write(html_content)finally:file_object.close()titles = re.findall(re_title,html_content)swfurl=base64.decodestring(swfs[0])file_ext ='.swf''''swf是空的,那么就是flv'''if swfurl =='http://img.61gequ.com':re_swf = re.compile('flvurl\:"(.*?)"',re.S|re.U)swfs = re.findall(re_swf,html_content)swfurl=base64.decodestring(swfs[0])file_ext = '.flv'		'''获取远程文件大小'''opener  = urllib2.build_opener()  request = urllib2.Request(swfurl)  request.get_method = lambda: 'HEAD'		try:  response = opener.open(request)  response.read()except Exception, e:ret = wx.MessageBox(u'发生错误 %s'%e,  u'WxPython Info', wx.OK|wx.CANCEL|wx.ICON_ERROR)else:swflen = dict(response.headers).get('content-length', 0)self.Label_Url.SetLabel(swfurl+"  "+str(round(int(swflen)/1024/1024,2)) +"M")if os.path.exists("D:/py/videos") == False:#print u"在当前目录下建立文件夹videos成功"try:os.mkdir("D:/py/videos");except:wx.MessageBox(u'建立文件夹失败 ',  u'WxPython Info', wx.OK|wx.ICON_ERROR)return'''如果远程视频长度小于10,那肯定是出错了'''if int(swflen) >10:urllib.urlretrieve(swfurl, "D:/py/videos/"+titles[0][1].decode('utf-8')+file_ext,self.urlcallback)		if  int(os.path.getsize(r"D:/py/videos/"+titles[0][1].decode('utf-8')+file_ext)) !=int(swflen) :wx.MessageBox(u'好像下载失败了,视频长度过段',  u'WxPython Info', wx.OK|wx.ICON_ERROR)	else:return 	else:wx.MessageBox(u"没有抓取到远程文件",  u'WxPython Info', wx.OK|wx.ICON_ERROR)	else:wx.MessageBox(u'请输入下载地址',u'WxPython Warning',wx.OK|wx.CANCEL|wx.ICON_ERROR)returnif __name__ == '__main__':  app = wx.PySimpleApp()frame = ButtonFrame()obj = frameframe.Center()frame.Show()frame.SetTitle(u"61儿童网下载器")frame.MAXIMIZE_BOX =Falseapp.MainLoop()

这篇关于一个WXPython+采集的 Demo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/761942

相关文章

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

linux 内核提权总结(demo+exp分析) -- 任意读写(四)

hijack_modprobe_path篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     原理同hijack_prctl, 当用户执行错误格式的elf文件时内核调用call_usermod

linux 内核提权总结(demo+exp分析) -- 任意读写(三)

hijack_prctl篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   prctl函数: 用户态函数,可用于定制进程参数,非常适合和内核进行交互 用户态执行prctl函数后触发prctl系统

linux 内核提权总结(demo+exp分析) -- 任意读写(二)

hijack_vdso篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     vdso: 内核实现的一个动态库,存在于内核,然后映射到用户态空间,可由用户态直接调用 内核中的vdso如果被修改

linux 内核提权总结(demo+exp分析) -- 任意读写(一)

cred篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   每个线程在内核中都对应一个线程结构块thread_infothread_info中存在task_struct类型结构体 struct t

linux 内核提权总结(demo+exp分析) -- ROP(二)

ret2usr CR4篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   smep: smep是内核的一种保护措施, 使得内核不可执行用户态代码 内核通过CR4寄存器的第20位来控制smep,

linux 内核提权总结(demo+exp分析) -- ROP(一)

基础ROP篇(linux 5.0.21) 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   内核提权与用户态攻击的区别 攻击流程 用户态攻击: 执行 system("/bin/sh") 获得shel

实例demo理解面向接口思想

浅显的理解面向接口编程 Android开发的语言是java,至少目前是,所以理解面向接口的思想是有必要的。下面通过一个简单的例子来理解。具体的概括我也不知道怎么说。 例子: 现在我们要开发一个应用,模拟移动存储设备的读写,即计算机与U盘、MP3、移动硬盘等设备进行数据交换。已知要实现U盘、MP3播放器、移动硬盘三种移动存储设备,要求计算机能同这三种设备进行数据交换,并且以后可能会有新的第三方的

类codepen的实现可拖拽窗口demo

首先说下思想 flex或者其他布局方式,实现左右分割布局,主盒子宽度100%,左右布局中包含一个分割条(可在布局容器中,也可以单独定义)为分隔条绑定鼠标点击事件,为document绑定鼠标移动事件和鼠标放开事件,通过监听鼠标移动事件和上一个状态保存下来的鼠标位置作对比,判断当前鼠标移动方向(往左还是往右)然后计算当前鼠标位置和鼠标点击位置的距离,来计算左右容器的变化,然后通过dom的方式设置宽度

Python 爬虫入门 - 基础数据采集

Python网络爬虫是一种强大且灵活的工具,用于从互联网上自动化地获取和处理数据。无论你是数据科学家、市场分析师,还是一个想要深入了解互联网数据的开发者,掌握网络爬虫技术都将为你打开一扇通向丰富数据资源的大门。 在本教程中,我们将从基本概念入手,逐步深入了解如何构建和优化网络爬虫,涵盖从发送请求、解析网页结构到保存数据的全过程,并讨论如何应对常见的反爬虫机制。通过本教程,你将能够构建有效的网络爬