美文网首页
Python第18课:网络爬虫及class类

Python第18课:网络爬虫及class类

作者: 启蒙时代 | 来源:发表于2019-01-31 11:27 被阅读0次

Python第18课:网络爬虫及class类

时间 2019-01-31 上午10:00

主讲 刘培富

地点 四楼电教室


一、网络爬虫

网络爬虫是利用网络规则,自动获取网页信息的一种程序。换言之,网络爬虫就是代替人工,自动把网页上有价值的内容读出来,存起来。网络爬虫由于自动爬取数据,有选择地收集数据,积累的数据量越来越大,发挥的作用就越来越突出。所以,网络爬虫作为数据采集的一种方式,日益受到人们的重视。

利用python爬数据,可以通过两个包来实现,一个是被比喻为AK47的Scrapy,另一个被比喻为瑞士军刀的requests,下面,以requests为例,讲解爬取数据的方法。

import requests

url='http://www.163.com'

r=requests.get(url)

r.encoding='gb2312'

print(r.text)

以上,即爬到了163网站的首页源码。再经过字符串加工,提取其中有价值的内容。

requests包的功能,远远不止这些,他可以向网页POST用户和密码,模拟用户登陆,并保持session,深入爬取有价值的信息。requests包的功能非常强大,网络上有很多教程,建议大家搜索自学,在此,不再赘述。

注:requests可以通过Anaconda离线安装

二、Clsas类:

在程序开发中,类被频繁使用。类是一个十分重要的概念,学习类的创建、调用,是python的基本功。

什么是类?我的理解是,类是从具体的个例中抽象出来的、具有普遍性的一个虚拟概念。类与实例,是共性与个性的关系。或者说,类好像一个模具,一台机械,可以生产出很多具体的东西来。

下面,通过一些具体的例子,掌握类的创建与使用。

(一)创建一个类

#创建类

class abc(object):

#类的属性:

    x=11

    __y=22    #变量前面加__代表私有变量

    #类的方法:

    def __init__(self):    #初始化

a=1

        b=2

        print("init")

def mn(self):

print("mn")

return "ffff"

#创建一个类的对象

a=abc()

print(a.x)#调用x变量

#print(a.__y) 这是错误的,私有变量不可调用

#print(a.__init__()) 这是错误的,私有变量不可调用

a.mn()#执行mn()方法

print(a.mn())#提取mn()方法的运行结果

类的属性,又被称作特征,类的方法,又被称作动作。类就是特征和动作的同一体。创建一个对象,又被称作实例化。这样理解,也是不错的。

(二)创建一个子类

#创建类

class abc(object):

def __init__(self):

print("init")

p=1

    def mn(self):

print("mn")

return "ffff"

class abcd(abc):

def xy(self):

print("xy")

p=2

b=abcd()

b.mn()#子类没有找到mn方法,则到父类中找。

print(b.p)

父类和子类创建后,针对用户的调用,首先在本体类中寻找结果,如果找不到,则到父类中寻找(称为类的继承)。如果找到了,就不再到父类中寻找。所以,对于子类和父类共有的属性和方法,互不冲突,只存在优先问题。

pass是空语句,是为了保持程序结构的完整性。 pass 不做任何事情,一般用做占位语句。

(三)类的调用

class Door():

"门的类"

    def __init__(self,size,color,type):

"初始化门的数据"

        self.size = size

self.color = color

self.type = type

def open(self):

"门打开的方法"

        print("这个%s门打开了" %self.type)

def off(self):

"门关闭的方法"

        print("这个%s门关闭了" %self.type)

door1 = Door(16,'red','木门')#门的实例化1

door1.open()

door2 = Door(34,'white','铝合金')#门的实例化2

door2.off()

注意self.x变量的使用。

class ABC(object):

x ='x in ABC'

    def aa(self, x):

x ='x in aa'

        print('aa - x:', x)

print('self.x:', self.x)

t = ABC()

t.aa("")

可见,self.的变量,专指类本身的属性。

(四)类的多继承

一个子类,可以继承一个父类,也可以继承多个父类。

class D:

def bar(self):

print('D.bar')

class C(D):

def bar(self):

print('C.bar')

class B(D):

def bar(self):

print('B.bar')

class A(B, C):

def bar(self):

print('A.bar')

a = A()

a.bar()

执行bar方法时, 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错。

#所以,查找顺序:A本类 --> B父类1 --> D父类1的父类 --> C父类2

在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了。

Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先广度优先

当类是经典类时,多继承情况下,会按照深度优先方式查找

当类是新式类时,多继承情况下,会按照广度优先方式查找

经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了跟多的功能,也是之后推荐的写法,从写法上区分的话,如果当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类

思考:


str(99),这里,str()是一个函数。

a.strip(),这里,strip()是一个类的方法。

类,是一个抽象的概念,使用时必须实例化。

相关文章

网友评论

      本文标题:Python第18课:网络爬虫及class类

      本文链接:https://www.haomeiwen.com/subject/yldfsqtx.html