Python是一种可读性极强的通用编程语言。Python这个名字的灵感来自英国喜剧团体MontyPython,其开发团队有一个重要的基本目标,即让这门语言用起来有趣。Python易于设置,并且以相对简单的风格编写,可提供即时的错误反馈,使其成为初学者的绝佳选择。Python是一种多范式语言,即它支持多种编程风格,包括脚本和面向对象,这使其适用于一般用途。随着联合太空联盟(NASA的主要飞机支持承包商)和IndustrialLight&Magic(VFX和Lucasfilm的动画工作室)等组织在工业中的使用越来越多,Python提供了一种额外的编程语言,为任何人提供了巨大的潜力。当一个名为comp.lang.python的主要Python新闻组于1994年成立时,Python的用户群持续增长,为Python成为开源开发中最流行的编程语言之一铺平了道路。Python现在真的很火。Python实战项目一直特别受关注。下面给大家介绍一下Python实践的实战项目。Python项目练习一:立即打分这就是《python基础教程》背后的练习。写下来,一方面是为了熟悉python的代码方法,另一方面是为了练习使用python的基础语法和非基础语法,做到熟能生巧。这个项目一开始比较简单,重构之后变得有点复杂,但是更加灵活。按照书上的说法,重构后的程序分为四个模块:处理程序模块、过滤模块、规则(其实应该是处理规则)、语法分析器。让我们先谈谈处理程序模块。这个模块有两个功能。一是提供那些固定的html标签的输出(每个标签都有开始和结束),二是提供友好的访问接口。看看程序handlers.py:这个程序是整个“项目”的基石:它提供了标签的输出和字符串的替换。理解起来也比较简单。我们来看第二个模块“过滤器”。这个模块比较简单,其实就是一串正则表达式。相关代码如下:这是三个过滤器,分别是:emphasiscardfilter(标有×)、urlcardfilter、emailcardfilter。熟悉正则表达式的同学理解起来毫无压力。我们来看第三个模块“规则”。这个模块除了祖父类之外,还有其他类应该有的两个方法:condition和action。前者用来判断读取的字符串是否符合自己的规则。后者用于执行操作,所谓执行操作是指调用“handler模??块”输出前台标签、内容、后置标签。我们来看看这个模块的代码。其实这个模块中的几个类之间的关系画在类图中会更清晰。rules.py:补充utils.py:总结:最后,我们来宏大一下“语法分析器模块”。该模块的作用是协调阅读文本与其他模块的关系。说得更着重一点,提供了两个用于存储“规则”和“过滤器”的列表。这样做的好处是整个程序的灵活性得到了很大的提高,使得规则和过滤器可以热插拔当然这也是由于在编写的时候每一类规则(过滤器)都是作为一个单独的类来写的规则和过滤器,而不是使用if..else来区分。看代码:本模块中的处理思路是遍历客户端(即程序执行的入口)插入的所有规则和过滤器,对读取到的文本进行处理。有一个细节值得一提。其实和我前面写的是呼应的,就是在遍历规则的时候,我们调用条件来判断是否符合当前的规则。我认为这个程序与命令行模式非常相似。等我有时间维护记忆网络节点的稳固性时,我可以回顾一下这个模式。最后说说我认为这个程序的用途:1.用于代码高亮分析。如果改写成js版本,可以作为在线代码编辑器使用。2.可以用来学习,也可以用来写博文。还有其他的想法,可以留下你的见解。加个类图,很简单,但是应该能说明他们之间的关系。另外,我还是建议,如果看了代码还搞不清楚关系,最好自己画一张图,这样可以熟悉整个结构。Python项目练习2:好相框这是《python基础教程》中的第二个项目,python操作PDF涉及的知识点1、urllib的使用2、reportlab库的使用这个例子真的很简单,但是我发现,在python中,可以直接在数组[]中写一个for循环,真是越用越方便。代码如下:Python项目练习3:万能XML这个项目的名字不叫万能XML,而是叫自动建站。根据一个XML文件,生成一个相应目录结构的网站,但是只有html还是太简单了。如果能一起生成css就更强大了。这个有待后续研发,我们先研究一下html网站的结构。由于网站是通过XML结构生成的,所以一切都应该由这个XML文件来完成。我们先来看看这个XML文件,website.xml:有了这个文件,我们就来看看如何通过这个文件生成一个网站。首先,我们需要解析xml文件。Python解析xml的方式与java相同。有两种方式,SAX和DOM。两种处理方法的区别在于速度和范围。前者讲究效率,每次只处理文档的一小部分,快速有效的使用内存,后者是相反的处理方式,先把文档全部加载到内存中,然后再进行处理,速度比较慢,而且比较耗内存,唯一的好处就是可以操作整个文档。在python中使用sax处理xml,首先要在xml.sax中引入parse函数,在xml.sax.handler中引入ContentHandler。后一类要与解析函数结合使用。使用方法如下:parse('xxx.xml',xxxHandler),这里的xxxHandler必须继承上面的ContentHandler,但是只要继承就可以了,不需要做区别。那么这个parse函数在处理xml文件的时候会调用xxxHandler中的startElement函数和endElement函数来开始和结束xml中的标签。中间过程使用一个名为characters的函数来处理label内的所有字符串。有了上面的知识,我们就已经知道如何处理xml文件了,接下来查看作案源头的website.xml文件,分析其结构。只有两个节点:页面和目录。很明显,page就是一个页??面,directory就是一个目录。于是处理这个xml文件的思路就清晰了。读取xml文件的每个节点,然后判断是页面还是目录。如果是页面,则创建一个html页面,然后将节点中的内容写入到文件中。如果遇到目录,则创建文件夹,然后处理其中的页面节点(如果存在)。让我们看一下这部分代码。书中的实现比较复杂,也比较灵活。先看,再分析。看来这个程序的分析有点复杂,不过猫猫大佬说过,任何复杂的程序都是纸老虎。那我们再分析一下这个程序。首先,我看到这个程序有两个类。其实可以看做是一个类,因为继承。那么让我们看看它有什么。除了我们分析的startElement、endElement和character之外,还有startPage、endPage;开始目录,结束目录;默认开始,默认结束;确保目录;写页眉,写页脚;和调度,这些功能。除了dispatch,前面的功能都很好理解。每对函数只处理相应的html标签和xml节点。dispatch比较复杂,复杂的地方在于它是用来动态组合函数并执行的。dispatch的处理思路是先根据传入的参数(即操作名和节点名)判断是否有startPage等对应的函数,如果不存在则执行default+操作名:比如默认启动。当你一一弄清楚每一个功能后,你就会知道整个处理流程是什么样子的。首先创建一个public_html文件存放整个网站,然后读取xml节点,通过startElement和endElement调用dispatch进行处理。然后就是dispatch如何调用具体的处理函数。至此,这个项目已经分析完毕。主要掌握的内容是python中SAX处理XML的使用,另外就是python中函数的使用,比如getattr,传递参数时的星号……Python项目练习四:新闻中的第四个练习聚合图书,聚合新闻。这些天来很少见的一类应用程序,至少我从未使用过它们,称为Usenet。这个程序的主要功能是从指定的来源(这里是Usenet新闻组)收集信息,然后将信息保存到指定的目标文件(这里使用两种形式:纯文本和html文件)。这个程序的用处有点类似于现在的博客订阅工具或者RSSfeeder。先放代码,再一一分析:这个程序先整体分析一下,关键部分是NewsAgent,它的作用是存储新闻源,存储目标地址,然后调用源服务器(NNTPSource和SimpleWebSource)并编写新闻类(PlainDestination和HTMLDestination)。所以从这里也可以看出,NNTPSource是专门用来获取新闻服务器上的信息的,而SimpleWebSource是用来获取某个url上的数据的。PlainDestination和HTMLDestination的作用是显而易见的。前者用于将获取的内容输出到终端,后者用于向html文件写入数据。有了这些分析,我们再来看看主程序的内容。主要程序是为NewsAgent添加信息源和输出目的地址。这确实是一个简单的程序,但是这个程序使用了层。想要更加系统高效的学习Python爬虫,推荐一个gzh——【Python编程学习圈】,每天分享技术文章,供大家阅读学习。关注的话,可以免费领取Python从初学者到高级的全套学习资料和教程,如果你有兴趣,快点。
