0 1
案例一
Python当中的面向对象的编程


陌生人,我也为你祝福,愿你有一个灿烂的前程,愿你有情人终成眷属,愿你在尘世获得幸福。

引言
在我们之前大一那会儿学过的C语言以及Java语言当中,我们了解到C语言是纯面向过程的语言,最初接触C语言,懵懵懂懂,误打误撞,会写几个案例,当然,这些案例都与算法有关,最常用的几个就是:排序算法,冒泡排序,递归算法等等这些基础的算法,为大一那会儿可添加了不少乐趣,其中C指针啊,数组,函数,数据类型,循环,编译预处理这些个东西,对于刚接触编程的我来说,就像天书一样,本人提前申明,本人数学不是很好,所以,脑子转不过弯儿,所以,在面向过程的思想当中,很苦恼,毕竟面向过程体现的是思路,那会儿不怎么会,但是呢,经过不断的练习,熟能生巧,基础案例基本上已经掌握个七七八八,为后续的面向对象的思维方面打下了基础。

好了,引言已结束,接下来,我们开始步入正题。
我们今天所讲的案例,是Python的面向对象编程,本期将不会讲述关于Python的基础知识,后续内容我会继续跟进,关于Python的基础。今天所讲的案例,是关于Python的爬虫案例,我们会用面向对象的思想,向你讲授这个案例。具体实现步骤如下:
我们需要用到Python中的
requests库,这是Python中的一个第三方库,不属于Python中的标准模块,安装方法如下:在Windows的命令行中安装:Python环境默认自带
pip命令
pip install requests
导入模块:import requests
1.定义初始化方法,自动执行,准备URL地址
def __init__(self,name,pn): # 定义请求头,进行浏览器伪装,告诉服务器你不是爬虫 self.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'} #动态获取贴吧名称 self.url = 'https://tieba.baidu.com/f?kw={}&ie=utf-8&pn='.format(name) #动态获取页数,实现自定义翻页 self.url_list = [self.url+str(x*50) for x in range(pn)] #定义变量,用来保存贴吧名称 = name
2.定义网络请求方法,获取响应数据
def get_data(self): #传入URL地址以及请求的头部信息 resp = requests.get(self.url,headers = self.headers) #返回响应信息,decode()方法是将网页解析成字符串,而不是二进制 return resp.content.decode()
3.定义保存数据的方法
def save_data(self,data,index): file_name = + str(index) + '.html' with open(file_name,'w',encoding='utf8') as f: f.write(data)4.定义入口方法,实现类里面各个函数的功能
def run(self): #遍历URL列表取出不同页数的URL for url in self.url_list: index = self.url_list.index(url) data = self.get_data() self.save_data(data,index) #定义主函数,先实例化对象,再调用其方法,完成方法功能 if __name__ == '__main__': tieba = TieBa('武汉',2) tieba.run()
明确代码思路1.我们要爬取某个网页的内容,获取想要的东西:
首先:
<1 准备数据源所在的网络地址(URL)
<2 定义网络请求的方法,这边我们可以用Python的 Requests库
<3 保存数据
2.具体的思路体现:
<1. 伪装自己:headers参数
Python默认的请求头和我们浏览器的请求头不一样,我们不定义相当于裸奔
不去定义,大型网站的服务器可能会拒绝给数据,欺骗你
<2 我们获取的数据不是一成不变得,而是去动态的获取,所以某些参数不能写死
就用贴吧的数据来说
我们要实现贴吧的自动翻页
'https://tieba.baidu.com/f?kw=%E6%AD%A6%E6%B1%89&ie=utf-8&pn='
pn参数不能写死
pn参数:根据贴吧的翻页规则去发现规律,自定义写
kw={} 可以用{}.format() 方法去自行填充
<3 获取数据:
我们要注意网页的编码方式,进行相对应的解码
有两种方式:
1. resp.text 直接转化成Str格式,但可能会有乱码,需要在其上一行代码指定其编码字符
resp.encoding='utf8'
2. resp.content 将网页转化成二进制输出 解码需要加参数
resp.content.decode() 二进制转Str
实现自定义爬去贴吧,而不是指定死,只爬去这一个
'https://tieba.baidu.com/f?kw=%E6%AD%A6%E6%B1%89&ie=utf-8&pn=0'
kw={参数} 不能写死,我们需要去变动他
<4 保存数据:
保存数据我们需要考虑如何保存更加有效,考虑到单个保存,我们需要去遍历数组的索引
用'XX吧0.html去命名',以此类推
好了,本期案例讲解完毕,大家有什么意见,我们可以私聊,欢迎各位前来叨扰

















