勤学思培训网LYMEZD
  • 总算懂了python+数据+入门项目

    随着人工智能 大数据的火热 Python成为了广大科学家和普通大众的学习语言。在学习Python的过程中 有很多人感到迷茫 不知道自己该从什么地方入手,今天我们就来说一些新手该如何学习Python编程。以下是小编为你整理的python+数据+入门项目

    相信大多人在学习Python之前 肯定都自己了解过这门语言,也知道Python有很多的学习方向,比如说数据采集方向(爬虫),或者Web开发方向,也可能是最近特别火热的人工智能方向。每个方向所需要的技术都是不尽相同的,所以在我们学习完成Python的基础语法之后,一定要慎重选择自己之后的进阶方向。


    [图片0]

    就像学习其他编程语言或者是学习一门外语一样 ,我们应该从Python的基础语法开始学习 ,了解什么是Python的变量 什么是循环 什么是函数,什么是模块。类等等。总之,基础是学习以后高级开发的基石。

    学习完基础之后,我们肯定要进行一些简单的联系。文件的操作是我们不二的选择,因为无论是文本文件。XML格式的文件还是Office办公系列的文件。我们统称之为文件操作。

    我们在学习文件操作的时候,要学习文件的写入和读取 以及了解各种文件之间的读写不同知识点。相信在学习完成之后,对于文件的操作 大家一定会得心应手。

    选择操作系统

    学习任何一门语言,选择操作系统,搭建开发环境是必不可少的。学习Python,这里推荐Linux系统,在Linux平台一般都是配置好Python开发平台,安装好系统就可以写程序。如果你选择windows,就要自己下载并配置好Python开发环境。【开发环境的选择】

    选择一门重视大脑学习的书籍,在这里推荐《Head First Python》,这是我看过最注重大脑学习的书籍,对于新手入门极有好处。【书籍】

    仔细阅读有关Python的书籍,好记心不如烂不同,一定要做笔记,过后回顾笔记。书上给出的练习,一定要做,并且争取全部弄懂。书上有的练习代码,一定要自己调试一遍,知其所以然。【看书练习】

    每天的编码必不可少,既然选择学习编程,学习Python,坚持编码应该是必须做到的。没有代码积累,要写出高质量的代码,几乎不可能。【坚持编码】

    在写过不少基础代码之后,可以去各大Python相关的网站阅读别人的代码,多阅读别人的也是提高自己的编码水平的很好途径,同时,有把自己的代码分享给别人阅读,一边互相交流促进。【阅读代码分享代码】

    明确学习目标

    最重要的是明白学python的目的是什么,是数据挖掘还是想刷个火车票啥的,是机器学习还是搞个小脚本装下,是想成为厉害的harker还是强大的web开发者。只有明白了目的,才有学下去的动力。

    环境搭建。下载并安装好python及IDE,你需要明白什么是IDE,什么是命令行等,并配置好路径及环境变量。在这里推荐大家找下免费的pycharm,风格比较舒服,但是会比较慢。


    [图片1]

    基础练习。没有编程基础的可以先过一下基础,可以找本书练,也可以在网上寻找视频练习。现在网络这么发达,应该加强在网上找答案的能力。

    根据自己的目标去深耕。知识的学习都是由浅入深的,先掌握基础,再根据自己的目标去练习,才会有效果。不要三心二意,今天学十分钟爬虫,明天学5钟机器学习什么的。

    不断练习,不断练习。量变到质变的过程。只有在敲代码的过程中才会遇到自己的问题,解决了就提升了。

    scrapy

    scrapy简单易用,效率极高,自带多线程机制。但是也正因为它的多线程机制导致在用scrapy写爬虫的时候处理断点续爬很恼火。当你用for循环遍历一个网站的所有页面的时候,例如:

    如果这个网站有10000页,启动scrapy后程序第一个发送的请求可能就是第10000页,然后第二个请求可能就是第1页。当程序跑到一半断掉的时候天知道有哪些页是爬过的。不过针对这个问题也不是没有解决办法。

    总之我们要想保证爬取数据的完整就要牺牲程序的效率。

    有的人把所有爬取过的url列表保存到一个文件当中,然后再次启动的时候每次爬取要和文件当中的url列表对比,如果相同则不再爬取。

    有的人在scrapy再次启动爬取的时候和数据库里面的数据做对比,如果相同则不存取。

    还有一种办法呢就是利用Request中的优先级(priority)

    前两种方法就不详细说了,通俗易懂。主要说一下这个优先级。修改上面的代码:

    当Request中加入了priority属性的时候,每次scrapy从请求队列中取请求的时候就会判断优先级,先取出优先级高的去访问。由于scrapy默认启动十个线程。这时优先级为100 的就会在优先级为90之前被取出请求队列,这样呢我们就能大体上保证爬取网页的顺序性。

    保证了顺序性之后呢,我们就要记录已经爬取的页数。由于发送请求,下载页面,存取数据这几个动作是顺序执行的,也就是说程序发送了这个请求不代表此时已经爬取到这一页了,只有当收到response的时候我们才能确定我们已经获取到了数据