Python编程基础 课件 CH09面向对象:采集网络图书数据_第1页
Python编程基础 课件 CH09面向对象:采集网络图书数据_第2页
Python编程基础 课件 CH09面向对象:采集网络图书数据_第3页
Python编程基础 课件 CH09面向对象:采集网络图书数据_第4页
Python编程基础 课件 CH09面向对象:采集网络图书数据_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深入浅出Python编程

(模块5面向对象程序设计)第9单元采集网络图书数据

从当当网和豆瓣网查询图书信息将当当网查询的图书信息解析并以字典形式存入文件将豆瓣网查询的图书信息解析并以文本的形式存入文件Outcome单元目标/Objectives理解面向对象程序设计思想

掌握面向对象编程的三大特性

熟练掌握Python类和对象的基本使用

理解类成员和实例成员的区别

掌握简单网络爬虫应用⑥具有良好的职业道德和法治意识内容及计划/Agenda&Schedule12/6ClassHoursDetails专科应用本科<00:10><00:10>回顾&成果介绍<01:20><00:40>了解面向对象程序设计<01:20><00:40>类的派生:编写爬虫基类<02:05><01:05>检索并爬取当当网图书数据<01:20><00:40>了解正则表达式<01:40><00:40>检索并爬取豆瓣网图书数据<00:05><00:05>课堂小结Total:12/6hours(8/4hPractice)Total:54Hours(24hPractice)01图书数据采集webcrawler1.任务分析目标解构采集数据:发起网络访问请求,并获得网站返回的响应网页HTML文件。解析数据:对拿到的网页文件进行分析、解析,找到包含所需数据的HTML节点。清理数据:对提取的数据按规范的存储要求进行查漏补缺,统一格式要求。保存数据:将最终的数据保存到文件或数据库。模式识别JSON和TEXT格式的数据文件。提取书名、作者和出版社等三项数据。1.任务分析模式归纳采集数据主要是发起HTTP网络访问请求。解析数据要从网页HTML文件中提取包含所需数据的节点,并从中拿到数据项,这需要对HTMLDOC结构进行操作;清理数据是按规范格式整理数据。保存数据只涉及到文件的写入操作。算法设计OOP编程:将相同的需求抽象出来封装到基类,将相似但有不相同的需求分别由不同的子类来实现。requests第三方模块发起访问请求。BeautifulSoup和正则表达式。2.任务准备requests模块模拟访问Web服务器、自动提交网络请求一般,爬虫的时候通过设置User-Agent+Referer伪装成浏览器去访问网页也是绕过反爬虫的一种手段beautifulsoup4模块从HTML或XML文件中提取数据支持Python标准库中的HTML解析器(html.parser),还支持一些第三方的解析器,包括lxml解析器、html5lib解析器等2.任务准备什么是HTML文档<HTML>:通知客户端浏览器这是一个HTML文档,需要浏览器用HTML格式解释它,直到文件尾部的</HTML>。<HEAD>:文档的起始部分,主要是用来描述文档的一些基本性质,不会被当成网页的主体显示在浏览器中。<BODY>:文档的内容部分,显示在浏览器中。<!DOCTYPEhtml><html></html><head></head></body><body><title>Python编程

</title><metacharset=‘uft-8’/><p>这是正文里的一个段落</p><html><body><h1><p>02认识类和对象Class&Object1.了解面向对象编程面向对象程序设计(Object-OrientedProgramming,OOP):一种基于“对象(objects)”概念的编程范式一种基于“对象(objects)”概念的编程范式包含数据/data和代码/code:字段(fields)形式的数据,通常称为特性(attributes)或属性(properties)。过程(procedures)形式的代码,通常称为方法(methods)。1.了解面向对象编程类是模板,对象是根据模板创建的特定实例类(class)是一个抽象概念,是一系列具有相同特征和行为的事物的统称;对象(object)作为内存区域,可包含任意数量和类型的数据并由标识符引用。1.了解面向对象编程面向对象编程的三大特性封装(encapsulation):封装=数据+代码;类=变量+方法继承(inheritance):派生类/子类自动拥有其父类的所有属性和方法多态(polymorphism):纵向上来看,依赖于继承;横向上看,依赖于接口(interface)。2.类的创建与实例化—

实例成员Python创建一个类要用到关键字class,语法格式如下:2.类的创建与实例化—

实例成员Python创建一个类要用到关键字class,语法格式如下:创建一个对象的语法格式如下:2.类的创建与实例化—

实例成员类的实例之间互补干扰self__str()__方法可以得到实例对象的地址2.类的创建与实例化—

实例成员Python允许动态地为类和对象增加成员实例对象动态创建的属性只对该实例对象有效,对同一类的其它对象是没有影响的2.类的创建与实例化—

类的成员类的成员属性相同类的实例对象都能共享一个在“类层面的全局变量”3.成员的访问控制—

名称中的下划线Python虽然没有严格的私有成员概念,但通过对使用下划线“_”、双下划线“__”命名的约定,对成员属性和成员方法的“可见”性有其专门含义前置单下划线,_var:命名约定,供内部使用/受保护,对python解释器没作用。后置单下划线,var_:命名约定,规避与Python关键字名字的冲突。前置双下划线,__var:类中使用触发名称改写(namemangling),对python解释器有作用。前后双下划线,__var__:Python定义的特殊方法,自定义的属性中要避免使用。仅单下划线,_:临时的、无关紧要的。3.成员的访问控制—

名称中的下划线访问限制-私有变量3.成员的访问控制—

添加属性访问限制-方法封装类的设计中定义变量为私有,然后再为该变量编写两个成员函数分别用于读和写。3.成员的访问控制—

添加属性访问限制-属性读装饰器:@property写装饰器:@属性名.setter。3.成员的访问控制—

添加属性最佳实践一旦我们决定使用属性,那就在所有的地方都要去使用属性。python_beginner._Book__price名称改写的方式直接访问私有变量,但并不推荐这么做编写类的属性4.特殊的类和方法—

类方法与类的属性相似,类也可以拥有方法:使用装饰器@classmethod修饰,可以通过类名调用类方法,也可以通过对象名调用类方法。实例对象方法第一个参数为self,而类方法第一个参数必须是当前的类自身,一般命名为cls。4.特殊的类和方法—

静态方法类的静态方法主要用于类对外部函数的封装,有助于整合代码,集成通用性的外部函数到类中。使用装饰器@staticmethod修饰,不需要传入默认参数/self&cls。既不能访问实例对象的属性和方法,也无法访问类的属性和方法。对象(object)和类(class)都可以调用静态方法4.特殊的类和方法—

静态方法4.特殊的类和方法—

模型类模型类(modelclass):自定义数据结构来装载数据只关注类的属性,不在意类的方法。一个“空类”,它将一些命名的数据项捆绑在一起。4.特殊的类和方法—

模型类图书信息Book模型类book.py编写Book模型类03编写爬虫基类Crawler1.编写爬虫基类—

编写基类Crawlercrawler.py抽象出对当当和豆瓣网的爬虫操作共性部分都需要知道图书的名字/book_name存储爬取书籍信息列表/book_data爬取数据后都需要保存到文件中去/save_book1.编写爬虫基类—

编写基类Crawler将每一个Book实例对象写入一个txt文件中,并对每一个写入对象做了计数,我们称之为对象的序列化(serialization)析构函数:__del__(self)1.编写爬虫基类—

改写父类的方法派生子类或者说派生类继承了基类/父类的方法后可以直接使用,也可以修改。既可以在继承的基础新增功能,也可以重写父类方法,实现与父类完全不同的功能。直接打印一个实例对象时会输出该对象的地址,但如果想自定义输出内容,就可以通过改写父类object的__str__()方法来实现。1.编写爬虫基类—

改写父类的方法改写Crawler类的save_book()方法Book类自带格式化的输出,那么Crawler类中将Book的实例对象写入文件时就可以直接写入对象了,我们再改写一下Crawler类的save_book()方法。1.编写爬虫基类—

调用父类的方法编写子类:继承自Crawler类classDerivedClassName(modname.BaseClassName):1.编写爬虫基类—

调用父类的方法如果要在子类中直接引用父类的方法:使用super()方法;或者BaseClassName.methodname(self,arguments)04检索并爬取当当网图书DangDang1.爬取并解析HTML数据get查询:search_book(self)方法super()完成了父类的初始化使用模块:requests.get()伪装成浏览器的访问/User-Agent属性中文乱码:返回值encoding='gbk‘安全编码:访问网络的代码置入异常子句1.爬取并解析HTML数据HTMLDOM分析所有的图书查询结果都包含在一个<ul></ul>标签对中每本图书的信息包含在<ul>包含的<li></li>标签对中class="bigimg"id="component_59"1.爬取并解析HTML数据BeautifulSoup+html.parser2.JSON格式保存数据如何让Python知道我们自己定义的对象与JSON对象之间的转换映射关系json模块的JSONEncoder类用于Python数据结构的可扩展JSON编码器改写json.JSONEncoder类的default(self,obj)成员方法来实现BookEncoder类创建了一个BookEncoder的新类,该类继承自json.JSONEncoder类,并在子类中改写了default()成员方法2.JSON格式保存数据改写父类Crawler类中的save_book()成员方法识别自定义类型Book:cls=BookEncoder中文不乱码:ensure_ascii=False从当当网检索并解析结果,将数据以JSON格式形式存入文件05检索并爬取豆瓣网图书Douban1.了解正则表达式—

模式定义正则表达式(regularexpression)是一种描述字符串模式结构的方法,将模式(pattern)与字符序列(string)进行匹配。所谓模式也是一个字符串,它由一些普通字符和正则表达式元字符(metacharacters)组成,用于与字符串匹配,完成“查找和替换”。正则表达式元字符(metacharacters)重复它们或改变它们的含义来影响正则的其他部分。常见的如右表所示。1.了解正则表达式—

模式定义1.了解正则表达式—

模式定义1.了解正则表达式—

模式定义特殊的正则表达式序列由于字符*、+、?等在正则表达式中有特殊的含义,因此它们不能用来匹配相应的普通字符。为了匹配有特殊含义的字符,必须使用转义序列“\”,比如:\.\?,就表示“.?”除了作为转义序列符使用,还可以表示一些特殊序列,见左表1.了解正则表达式—

字符匹配re模块还为我们提供了多个函数用于匹配、搜索以及找出匹配对象和值match():从字符串开头去匹配并返回匹配的字符串的match对象,可以调用对象的group()方法获取匹配成功的字符串;search():并不局限于字符串的开头,扫描整个字符串找到匹配样式的第一个位置,并返回一个相应的匹配对象(matchobjects);findall():以字符串列表或字符串元组列表的形式返回所有非重叠匹配。1.了解正则表达式—

字符匹配匹配邮箱re模块的search()函数会去扫描整个字符串,如果匹配成功的话就会返回一个匹配对象(matchobjects),要获取匹配到的值,可以只用匹配对象的group()方法。海象运算符:=赋值表达式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论