python面向对象编程和requests的使用

面向对象简介

一个类占有一个独立的空间,类中的属性叫做类变量,类中的函数,叫做类的方法。

类(Class):也可以成为类对象。类对象中包含了一批实例对象共有的属性和方法。

类变量:定义在类中且在函数体之外的变量。类变量在所有的实例变量中是共享的,类变量修改了,所有实例对象读取到的值都会修改。

实例变量:定义在类的实例方法中的变量,只作为当前实例的属性。

数据成员:类变量或者实例变量,以及用于处理类及其实例对象的相关的数据的统称。

方法:类中定义的函数。包含实例方法,类方法,静态方法。

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。其实只是在派生类中添加了同名方法,以至于查询方法时不会再向基类查询

继承:即一个派生类(derived class)继承基类(base class)的属性和方法。继承也允许把一个派生类的对象作为一个基类对象对待。(就是说派生类还可以再派生子类)

实例化:创建一个类的实例,类的具体对象。在实例对象开辟一个空间,并为实例对象添加对类的引用。并没有复制类中的属性和方法到实例对象中。

实例对象:通过类定义的数据结构实例。

三大特征——封装、继承、多态

1、封装(Encapsulation)

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。

class Foo:
 
    def __init__(self, name, age ,gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def eat(self):
        print "%s,%s岁,%s,eat" %(self.name, self.age, self.gender)
 
    def he(self):
        print "%s,%s岁,%s,drink" %(self.name, self.age, self.gender)
 
    def shui(self):
        print "%s,%s岁,%s,sleep" %(self.name, self.age, self.gender)
 
a = Foo('Duncan', 22, 'male')
a.eat()
a.he()
a.shui()
 
b = Foo('Tina', 30, 'female')
b.eat()
b.he()
b.shui()
2、继承(Inheritance)

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

class Animal:
 
    def eat(self):
        print "%s 吃 " %self.name
 
class Cat(Animal):
 
    def __init__(self, name):
        self.name = name
        self.breed = 'cat'
 
    def cry(self):
        print '喵喵..'
 
class Dog(Animal):
 
    def __init__(self, name):
        self.name = name
        self.breed = 'dog'
 
    def cry(self):
        print '汪汪..'
 
c1 = Cat('cat_one')
c1.eat()
 
c2 = Cat('cat_two')
c2.drink()
 
d1 = Dog('dog_one')
d1.eat()
3、多态(Polymorphism)

让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。
特点:
1、只关心对象的实例方法是否同名,不关心对象所属的类型;
2、对象所属的类之间,继承关系可有可无;
3、多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强;
4、多态是调用方法的技巧,不会影响到类的内部设计。

class A:    
    def prt(self):    
        print "A"    
class B(A):    
    def prt(self):    
        print "B"    
class C(A):    
    def prt(self):    
        print "C"    
class D(A):    
    pass    
class E:    
    def prt(self):    
        print "E"    
class F:    
    pass    
def test(arg):    
    arg.prt()    
a = A()    
b = B()    
c = C()    
d = D()    
e = E()    
f = F()    
test(a)    
test(b)    
test(c)    
test(d)    
test(e)    
test(f) 

实例

主函数
 if __name__ == '__main__':
     s = student()
     print(s)
     print(id(s))
     s.learn()
student类
class student(object):

     def __init__(self):
         self.number = 202031990532
         self.name = "yjp"

     def learn(self):
         print("正在学习")

     def teach(self):
         pass

自定义类中需要传入object参数, def init(self) 为自定义类中的构造方法,self为自定义类的参数本体表示,作为自定义类中所有方法的必加参数。
if name == ‘main 为主函数中标志, s = student() 为类的实例化,python中采用弱类型定义,通过等号右边的类型来确定等号左边的对象类型。

requests的使用

requests属于第三方库,Python不内置,因此需要我们手动安装。

pip安装
pip install requests
验证安装

在命令行可通过导入import库来测试requests是否安装成功。
在这里插入图片描述
导入库成功,说明requests安装成功

基本用法

步骤
1.发送请求
start_url = "https://www.baidu.com/"
headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
    }
    response  =  requests.get(start_url,headers=headers).text

确定需要访问的url,以及headers(进行UA伪装,通过浏览器的User-Agent对爬虫进行伪装)
通过requests的get方法进行请求

2.解析响应

通过页面的html代码对所需的内容进行分析,确定所需内容部分的标签
在这里插入图片描述

3.解析数据
    title = re.findall("<title>(.*?)</title>", response)[0]
4.保存数据
 with open("data.txt",'w') as f:
        f.write(title)
完整代码
import requests
import  re
def main():
    start_url = "https://www.baidu.com/"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
    }
    #1.发送请求
    response  =  requests.get(start_url,headers=headers).text
    #2.解析响应

    #3.解析数据
    title = re.findall("<title>(.*?)</title>", response)[0]
    #4.保存数据
    with open("data.txt",'w') as f:
        f.write(title)

if __name__ == '__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值