图形用户界面入门:EasyGui(模块)
http://easygui.sourceforge.net
http://bbs.fishc.com/thread-46069-1-1.html
安装easyui;下载easygui模块,打开cmd命令窗口,进入到easyui解压的setup.py的目录,执行命令:python setup.py install;前提python配置环境变量,没有的话,需要用D:\\python\\python.exe执行;
---------
------------
类和对象
>>> class B:
def sayHell():
print("hello")


>>> b = B()
>>> b.sayHell()
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
b.sayHell()
TypeError: sayHell() takes 0 positional arguments but 1 was given
上面的程序是错误的,没有self
需要按下面的写
>>> class B:
def sayHello(self):
print("hello")
>>> b = B()
>>> b.sayHello()
hello
注:self是代表这个对象的本身,如下面的程序
>>> class D:
name = "lisi"
def setName(self,name):
self.name = name
def getName(self):
print("this object's name is:"+self.name)
>>> d = D()
>>> d.getName()
this object's name is:lisi
>>> d.setName("zhangsan")
>>> d.getName()
this object's name is:zhangsan
注:上面的程序,要调用对象的属性,需要用self调用,不能直接print(name),而需要self.name调用;
class MyList(list):
....
上面的程序是继承列表list,它的继承关系是在括号中
---------
python魔法方法:
__init__(self):初始方法,也就是java中的构造方法;
>>> class F:
def __init__(self,name):
self.name=name
def getName(self):
print("Name is "+self.name)


>>> f =F()
Traceback (most recent call last):
File "<pyshell#73>", line 1, in <module>
f =F()
TypeError: __init__() missing 1 required positional argument: 'name'
>>> f=F("haha")
>>> f.getName()
Name is haha
-----------
在类中定义私有属性,在属性前面加上双下划线,如:__name="lisi"
>>> class G:
__name="lisi"
def getName(self):
print("My name is:"+self.__name)
>>> g = G()
>>> g.getName()
My name is:lisi
也可以通过以下格式访问私有属性
>>> g._G__name
对象名.一根下划线+类名+私有属性名(伪私有属性)
--------------
类的继承
class Chilrden(BaseName)
class Parent:
def hello(self):
print("hah")
class Child(Parent):
pass
注:子类中的pass,就是没有扩展方法,全部继承父类;
可以多继承,
class Child(BaseName,BaseName2);一般不推荐多继承;
---------------
类中定义属性是静态属性;当实例修改了属性,那么这个属性就是修改该实例属性;其他的实例没有修改该属性,还是引用类中的属性,当以类修改属性,其他没修改实例属性,也会改变。
注:Python严格规定,方法一定要有实例才能被调用。也就是方法中使用self;
一般使用self.x=x;self.x代表实例属性,直接定义的话,是静态属性;
--------
一些判断类的方法
isinstance(object,classinfo);判断一个对象是类的实例
issubclass(B,A);判断B是否是A的子类
hasattr(object,name);name是否object的属性
getattr(object,name);得到对象中name属性的值
getattr(object,name,default);如果对象中那么属性不存在,会打印default中的值,没有default时,直接报异常
setattr(object,name,value);添加对象的属性
delattr(object,name)删除对象汇总的属性
一般定义一个类,self代表当前对象,可以在初始化方法中定义对象的属性;
class A:
def __init_(self,name,age):
self.name=name
self.age=age
-----
class A:
name = "zhangsan"
这样定义的是类的静态变量
-------------
property用法:
>>> class C:
def __init__(self,size=10):
self.size=size
def getSize(self):
return self.size
def setSize(self,value):
self.size=value
def delSize(self):
del self.size
x = property(getSize,setSize,delSize)
>>> c = C()
>>> c.x
10
>>> c.x=20
>>> c.x
20
>>> del c.x
注:上面的程序,propert(get,set,del)中三个参数对应get,set,del三个方法,如果使用c.x就相当于c.getSize;c.x=20,相当于c.setSize(20),del c.x相当于c.delSize();可以用一个x方式不同代表一个属性的操作;
-------------
类中的一些方法:
__init__方法:当产生一个实例时,该方法会被调用;
__del__方法:当一个实例被删除时,该方法会被调用(需要被重写,才会启动垃圾机制)
>>> class J:
def __init__(self):
print("初始化对象")
def __del__(self):
print("对象被删除调用")


>>> j = J()
初始化对象
>>> del j
对象被删除调用
------------------
属性的访问
__getattr__(self,name)
__getattribute__(self,name)
__setattr__(self,name)
__delattr__(self,name)
-----------------
----------------
模块:一个python程序文件;
if __name__ == '__main__' :测试程序的入口
---
>>> import sys
>>> sys.path
模块路径搜索,如果模块在这个路径时,都可以引入;
创建一个包的步骤:
1、创建一个目录a
2、在目录中创建一个__init__.py文件,该文件可以为空;
3、导入目录中的模块使用import a.xx
--------------
----------------
爬虫:
python如何访问网页;
urllib包;
urllib.request类
urllib.request.urlopen(url):获取网页
简单的例子:
>>> import urllib.request
>>> response=urllib.request.urlopen("https://www.baidu.com/")
>>> html = response.read() ;读取html内容
>>> print(html)
html = html.decode('utf-8')
------------
将网站中的图片下载到本地中
import urllib.request
response = urllib.request.urlopen("http://placekitten.com/200/300")
cate_img=response.read()
with open("cate_img_200.jpg","wb") as f:
f.write(cate_img)
f.write(cate_img)将对象写入到文件中
----------------
可以使用:
req=urllib.requestRequest("http://placekitten.com/200/300")
response = urllib.request.urlopen(req)
-----
响应的对象的一些常用的方法:
response.geturl();得到访问的url
response.info():获取访问页面相关信息
---------------
import urllib.request
import urllib.parse
import json

url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
data={}
data['i'] = 'I love you' //提交的数据
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = '15594734208945'
data['sign'] = 'bfa374691c81cc71b1d05c18f9d65bde'
data['ts'] = '1559473420894'
data['bv'] = '1c005982eefa77bc1d18e402a421a724'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_REALTlME'
data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.Request(url,data)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
print(html)
result = json.loads(html)
print(result)
这个程序可以通过提交数据,与服务器交互,得到响应的数据;
--------
隐藏:一般python访问服务器,它的User-Agent是python类型的,可能会被服务器禁用,需要模拟浏览器访问,比如谷歌;这时需要设置header属性:如
import urllib.request
import urllib.parse
url = "http://fanyi.youdao.com/?keyfrom=dict2.top"
data = {}
head = {}
head['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
req = urllib.request.Request(url,data,head)
response = urllib.request.urlopen(req)
html = response.read()
html = html.decode('utf-8')
print(html)
注:req是请求对象;也可以使用req.add_header(key,value)
-------------
代理:如果频繁访问服务器,也可能会被服务器禁用,那么可以使用代理
1、参数是一个字典{'类型':'代理ip:端口号'}
proxy_support = urllib.request.ProxyHandler({})
2、定制、创建一个opener
opener=urllib.request.build_opener(proxy_support)
opener可以看做私人定制;
3、安装opener
urllib.request.install_opener(opener)//直接安装
opener.open(url);可以用这个访问
注:可以在网上搜代理
---------
import urllib.request
import random
url = 'https://www.baidu.com/'
#随机ip地址
iplist = ['125.115.182.204:3128','183.129.244.16:11232','163.125.112.104:8118']
#代理的http,random.choice()随机列表中的值
proxy_support = urllib.request.ProxyHandler({'HTTP':random.choice(iplist)})
#定制opener
opener=urllib.request.build_opener(proxy_support)
#设置访问浏览器类型
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36')]
#安装
urllib.request.install_opener(opener)
#访问网站,得到响应对象
response = urllib.request.urlopen(url)
#读取响应对象中的内容,并用utf-8解码
html = response.read().decode('utf-8')
#打印内容
print(html)
--------------------
-----------------------
#获取网页内容
import urllib.request
url = 'https://www.baidu.com/'
data={}
head = {}
head['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
req = urllib.request.Request(url,data,head)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
print(html)
注:这种爬取网页内容,可以将全部内容打印出来;而下面的爬取百度网页只有一点数据;是浏览器设置问题:
import urllib.request
url = 'https://www.baidu.com/'
data={}
head = {}
#head['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
#req = urllib.request.Request(url,data,head)
req = urllib.request.Request(url)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
print(html)
注:上面没有设置data,和head,爬取的网页元素很少
----------
-------------
#获取网页内容
import urllib.request
url = 'https://www.baidu.com/'
data={}
head = {}
head['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
req = urllib.request.Request(url,data,head)
#req = urllib.request.Request(url,data,req)
response = urllib.request.urlopen(req)
print(type(response.read()))
html = response.read().decode('utf-8')
print(type(html))
list1 = list(html)
print(type(list1))
print(html)
输出结果:
<class 'bytes'>
<class 'str'>
<class 'list'>
--------------
------------

posted on 2019-06-02 22:11  lazyli  阅读(162)  评论(0编辑  收藏  举报