Python爬虫学习路线

(一)如何学习Pythonpython

学习Python大体能够分为如下几个阶段:mysql

1.刚上手的时候确定是先过一遍Python最基本的知识,好比说:变量、数据结构、语法等,基础过的很快,基本上1~2周时间就能过完了,我当时是在这儿看的基础:Python 简介 | 菜鸟教程程序员

2.看完基础后,就是作一些小项目巩固基础,比方说:作一个终端计算器,若是实在找不到什么练手项目,能够在 Codecademy - learn to code, interactively, for free 上面进行练习。web

  1. 若是时间充裕的话能够买一本讲Python基础的书籍好比《Python编程》,阅读这些书籍,在巩固一遍基础的同时你会发现本身诸多没有学习到的边边角角,这一步是对本身基础知识的补充。

4.Python库是Python的精华所在,能够说Python库组成而且造就了Python,Python库是Python开发者的利器,因此学习Python库就显得尤其重要:The Python Standard Library ,Python库不少,若是你没有时间所有看完,不妨学习一遍经常使用的Python库:Python经常使用库面试

5.Python库是开发者利器,用这些库你能够作不少不少东西,最多见的网络爬虫、天然语言处理、图像识别等等,这些领域都有很强大的Python库作支持,因此当你学了Python库以后,必定要第一时间进行练习。正则表达式

6.学习使用了这些Python库,此时的你应该是对Python十分满意,也十分激动能遇到这样的语言,就是这个时候不妨开始学习Python数据结构与算法,Python设计模式,这是你进一步学习的一个重要步骤:faif/python-patterns算法

7.当度过艰难的第六步,此时选择你要研究的方向,若是你想作后端开发,不妨研究研究Django,再日后,就是你本身自由发挥了sql

(二)一些Python免费课程推荐数据库

如下课程都为免费课程编程

1.python零基础相关

适用人群:Python零基础的初学者、Web开发程序员、运维人员、有志于从事互联网行业以及各领域应用Python的人群,咱们的python,q,qun,784758214 行业资讯,技术分享,实战练习

Ø 疯狂的Python:快速入门精讲

Ø 零基础入门学习Python

Ø 玩转Python语言

Ø Python语言程序设计

Ø 程序设计入门

Ø 可汗学院公开课:计算机科学

Ø python 入门到精通

Ø Python交互式编程入门的课程主页

Ø Python交互编程入门(第2部分)的课程主页

2.python web方向
Python Django 快速Web应用开发入门

3.python爬虫
Python实战:一周学会爬取网页

4.python数据分析方向
数据分析实战基础课程

(三)Python爬虫须要哪些知识?

要学会使用Python爬取网页信息无外乎如下几点内容:
一、要会Python
二、知道网页信息如何呈现
三、了解网页信息如何产生
四、学会如何提取网页信息

第一步Python是工具,因此你必须熟练掌握它,要掌握到什么程度呢?若是你只想写一写简单的爬虫,不要炫技不考虑爬虫效率,你只须要掌握:

Ø 数据类型和变量

Ø 字符串和编码

Ø 使用list和tuple

Ø 条件判断、循环

Ø 使用dict和set

你甚至不须要掌握函数、异步、多线程、多进程,固然若是想要提升本身小爬虫的爬虫效率,提升数据的精确性,那么记住最好的方式是去系统的学习一遍Python,去哪儿学习?Python教程

假设已经熟悉了最基础的Python知识,那么进入第二步:知道网页信息如何呈现?你首先要知道所须要抓取的数据是怎样的呈现的,就像是你要学作一幅画,在开始以前你要知道这幅画是用什么画出来的,铅笔仍是水彩笔...可能种类是多样的,可是放到网页信息来讲这儿只有两种呈现方式:

一、HTML (HTML 简介)
二、JSON (JSON 简介)
HTML是用来描述网页的一种语言
JSON是一种轻量级的数据交换格式

假设你如今知道了数据是由HTML和JSON呈现出来的,那么咱们紧接着第三步:数据怎么来?数据固然是从服务器反馈给你的,为何要反馈给你?由于你发出了请求。

“Hi~ ,服务器我要这个资源”
“正在传输中...”
“已经收到HTML或者JSON格式的数据”

这个请求是什么请求?要搞清楚这一点你须要了解一下http的基础知识,更加精确来讲你须要去了解GET和POST是什么,区别是什么。

很高兴你使用的是Python,那么你只须要去掌握好快速上手 - Requests 2.10.0 文档,requests能够帮你模拟发出GET和POST请求,这真是太棒了。

饭菜已经备好,两菜一汤美味佳肴,下面就是好好享受了。如今咱们已经拿到了数据,咱们须要在这些错乱的数据中提取咱们须要的数据,这时候咱们有两个选择。

第一招:万能钥匙

Python正则表达式指南 ,再大再乱的内容,哪怕是大海捞针,只要告诉我这个针的样子我都能从茫茫大海中捞出来,强大的正则表达式是你提取数据的不二之选。

第二招:笑里藏刀

Beautiful Soup 4.2.0 文档,或许咱们有更好的选择,咱们把原始数据和咱们想要的数据的样子扔个这个Beautifulsoup,而后让它帮咱们去寻找,这也是一个不错的方案,可是论灵活性,第二招仍是略逊于第一招。

第三招:双剑合璧

最厉害的招式莫过于结合第一招和第二招了,打破天下无敌手。

基础知识我都会,但是我仍是写不了一个爬虫啊!
客观别急,这还没完。

如下这些项目,你拿来学习学习练练手。

一些教学项目你值得拥有:

Ø 03. 豆瓣电影TOP250

Ø 04. 另外一种抓取方式

(四)Python爬虫进阶

爬虫无非分为这几块:分析目标、下载页面、解析页面、存储内容,其中下载页面不提。

  1. 分析目标

所谓分析就是首先你要知道你须要抓取的数据来自哪里?怎么来?普通的网站一个简单的POST或者GET请求,不加密不反爬,几行代码就能模拟出来,这是最基本的,进阶就是学会分析一些复杂的目标,好比说:淘宝、新浪微博登录以及网易云的评论信息等等。

  1. 解析页面

解析页面主要是选择什么库或者那些库结合能使解析速度更快,可能你一开始你经过种种地方了解到了bs库,因而你对这个库很痴迷,之后只要写爬虫,老是先写上:

import requests

from bs4 import BeautifulSoup

固然bs已经很优秀了,可是并不表明能够用正则表达式解析的页面还须要使用bs,也不表明使用lxml能解决的还要动用bs,因此这些解析库的速度是你在进阶时要考虑的问题。

  1. 存储内容

刚开始学爬虫,通常爬取的结果只是打印出来,最后把在终端输出的结果复制粘贴保存就行了;后来发现麻烦会用上xlwt/openpyxl/csv的把存储内容写入表格,再后来使用数据库sqlite/mysql/neo4j只要调用了库都很简单,固然这是入门。

进阶要开始学习如何选择合适的数据库,或者存储方式。当爬取的内容过千万的时候,如何设计使存储速度更快,好比说当既有人物关系又有人物关系的时候,必定会用neo4j来存储关系,myslq用来存储用户信息,这样分开是由于若是信息所有存入neo4j,后期的存储速度经十分的慢。

当你每一个步骤都能作到很优秀的时候,你应该考虑如何组合这四个步骤,使你的爬虫达到效率最高,也就是所谓的爬虫策略问题,爬虫策略学习不是一朝一夕的事情,建议多看看一些比较优秀的爬虫的设计方案,好比说Scrapy。

除了爬取策略之外,还有几点也是必备的:

  1. 代理策略以及多用户策略

代理是爬虫进阶阶段必备的技能,与入门阶段直接套用代理不一样,在进阶阶段你须要考虑如何设计使用代理策略,何时换代理,代理的做用范围等等,多用户的抓取策略考虑的问题基本上与代理策略相同。

  1. 增量式抓取以及数据刷新

好比说你抓取的是一个酒店网站关于酒店价格数据信息的,那么会有这些问题:酒店的房型的价格是天天变更的,酒店网站天天会新增一批酒店,那么如何进行存储、如何进行数据刷新都是应该考虑的问题。

3.验证码相关的一些问题

有不少人提到验证码,我我的认为验证码不是爬虫主要去解决的问题,验证码很少的状况考虑下载到本地本身输入验证码,在多的状况下考虑接入打码平台。

(五)Python爬虫面试指南

前段时间快要毕业,而我又不想找本身的老本行Java开发了,因此面了不少Python爬虫岗位。由于我在南京上学,因此我一开始只是在南京投了简历,我一共面试了十几家企业,其中只有一家没有给我发offer,其余企业都愿意给到10K的薪资,不要拿南京的薪资水平和北上深的薪资水平比较,结合面试常问的问题类型说一说个人心得体会。

第一点:Python

由于面试的是Python爬虫岗位,面试官大多数会考察面试者的基础的Python知识,包括但不限于:

Ø Python2.x与Python3.x的区别

Ø Python的装饰器

Ø Python的异步

Ø Python的一些经常使用内置库,好比多线程之类的

第二点:数据结构与算法

数据结构与算法是对面试者尤为是校招生面试的一个很重要的点,固然小公司不会太在乎这些,从目前的招聘状况来看对面试者的数据结构与算法的重视程度与企业的好坏成正比,那些从不问你数据结构的你就要小心他们是否把你当码农用的,固然以上状况不绝对,最终解释权归面试官全部。

第三点:Python爬虫

最重要也是最关键的一点固然是你的Python爬虫相关的知识与经验储备,这一般也是面试官考察的重点,包括但不限于:

Ø 你遇到过的反爬虫的策略有哪些?

Ø 你经常使用的反反爬虫的方案有哪些?

Ø 你用过多线程和异步吗?除此以外你还用过什么方法来提升爬虫效率?

Ø 有没有作过增量式抓取?

Ø 对Python爬虫框架是否有了解?

第四点:爬虫相关的项目经验

爬虫重在实践,除了理论知识以外,面试官也会十分注重爬虫相关的项目:

Ø 你作过哪些爬虫项目?若是有Github最好

Ø 你认为你作的最好的爬虫项目是哪一个?其中解决了什么难题?有什么特别之处?

以上是我在面试过程当中,会碰到的一些技术相关的问题的总结,固然面试中不光是技术这一点,可是对于作技术的,过了技术面基本上就是薪资问题了。

(六)推荐一些不错的Python博客

若是是Python基础的话,廖雪峰的博客教程会是一个不错的选择:

Ø Python3教程

Ø Python 2.7教程

固然不少刚接触Python的同窗反应廖大大的教程中部分跳跃性太大,若是以为跳跃性太大能够结合菜鸟教程一块儿看:

Ø Python3 教程 | 菜鸟教程

Ø Python 基础教程 | 菜鸟教程

(七)Python如何进阶

不少人在学习编程之初都会碰到这种问题:学会了基础的语法了,可是仍是作不了项目,不知道如何下手。

当初,我学习C的时候是这样、Java的时候是这样、Python的时候也是这样,其实无论什么语言、什么知识都是这样:理论基础知识 - 能动手作项目是有一道鸿沟的。

那么如何突破这条鸿沟?中间的桥梁是什么?

其实题主本身已经回答出来了:照抄!

所谓照抄前提是有样本。

首先找到一些简单易上手的项目,这些项目大多散落在Python实践相关的书籍中、Github上,这些实战项目知乎上都有不少推荐。

1.一些比较好的适合初学者动手的项目:

Ø Show-Me-the-Code/show-me-the-code

Ø aosabook/500lines

2.大多数的Python书里面(除了纯理论书)都是有小项目的,并且书的一个优势是它会一步一步解释这样作的缘由。

先照抄这些项目,实现这些小功能在电脑上能运行确认无误以后,回过头来看代码:

Ø 有没有你不理解的地方,不理解的地方标记去搜索引擎或者书中找解释。

Ø 学习做者设计这个项目的思路方法,并运用到接下来的项目,若是时间充裕,建议隔天再从新再不看书的状况下从新本身实现一遍这些小项目。

若是你是跟着实战的书敲代码的,不少时候项目都不会一遍运行成功,那么你就要根据各类报错去寻找缘由,这也是一个学习的过程。

总结起来从Python入门跳出来的过程分为三步:照抄、照抄以后的理解、从新本身实现。

(八)Python爬虫入门

第一:Python爬虫学习系列教程

Python版本:3.6

总体目录:

1、爬虫入门

Ø Python爬虫入门一之综述

Ø Python爬虫入门二之爬虫基础了解

Ø Python爬虫入门三之Urllib库的基本使用

Ø Python爬虫入门四之Urllib库的高级用法

Ø Python爬虫入门五之URLError异常处理

Ø Python爬虫入门六之Cookie的使用

Ø Python爬虫入门七之正则表达式

2、爬虫实战

Ø Python爬虫实战一之爬取糗事百科段子

Ø Python爬虫实战二之爬取百度贴吧帖子

Ø Python爬虫实战三之实现山东大学无线网络掉线自动重连

Ø Python爬虫实战四之抓取淘宝MM照片

Ø Python爬虫实战五之模拟登陆淘宝并获取全部订单

Ø Python爬虫实战六之抓取爱问知识人问题并保存至数据库

Ø Python爬虫实战七之计算大学本学期绩点

Ø Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺

3、爬虫利器

Ø Python爬虫利器一之Requests库的用法

Ø Python爬虫利器二之Beautiful Soup的用法

Ø Python爬虫利器三之Xpath语法与lxml库的用法

Ø Python爬虫利器四之PhantomJS的用法

Ø Python爬虫利器五之Selenium的用法

Ø Python爬虫利器六之PyQuery的用法

4、爬虫进阶

Ø Python爬虫进阶一之爬虫框架概述

Ø Python爬虫进阶二之PySpider框架安装配置

Ø Python爬虫进阶三之爬虫框架Scrapy安装配置

Ø Python爬虫进阶四之PySpider的用法

第二(第一的姊妹篇):Python爬虫入门教程

Python版本:3.6

教程目录:

Ø [Python]网络爬虫(一):抓取网页的含义和URL基本构成

Ø [Python]网络爬虫(二):利用urllib2经过指定的URL抓取网页内容

Ø [Python]网络爬虫(三):异常的处理和HTTP状态码的分类

Ø [Python]网络爬虫(四):Opener与Handler的介绍和实例应用

Ø [Python]网络爬虫(五):urllib2的使用细节与抓站技巧

Ø [Python]网络爬虫(六):一个简单的百度贴吧的小爬虫

Ø [Python]网络爬虫(七):Python中的正则表达式教程

Ø [Python]网络爬虫(八):糗事百科的网络爬虫(v0.3)源码及解析(简化更新)

Ø [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析

Ø [Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)

Ø [Python]网络爬虫(11):亮剑!爬虫框架小抓抓Scrapy闪亮登场!

Ø [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程

但愿以上的教程能够帮助到你们。

(九)Python开发微信公众号

一、须要调用微信内部功能

须要调用微信内部功能组件的好比:公众号收发消息|图片、页面分享至朋友圈、用户受权提取用户基本信息、微信小店、微信公众号菜单等内部功能组件,这些功能组件在微信公众号开发者文档里面找到:微信公众平台开发者文档

对于这些功能组件,开发者文档都提供了详细的接口文档,告诉你如何调用,而你只须要用Python调用这些接口便可。好比一个很简单的消息发送的方法以下:

固然在这全部的调用以前,须要进行一些受权验证,一样开发者文档有一套完整的接入指南:接入指南 - 微信公众平台开发者文档

很遗憾不少初学者在一开始看这份文档的时候并不能看懂,因此这里也推荐一些我之前学习摸索的过程当中使用到的一些简单易学的教程。

你能够先作一个简单的微信机器人练练手(零基础十分容易上手):

Ø 使用python一步一步搭建微信公众平台(一)

Ø 使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具

Ø 使用python一步一步搭建微信公众平台(三)----添加用户关注后的欢迎信息与听音乐功能

Ø 使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自动回复

Ø 使用python一步一步搭建微信公众平台(五)----使用mysql服务来记录用户的反馈

若是你已经能按照以上的教程搭建一个完整的微信机器人了,基本上对于微信收发消息等等简单功能已经没有什么障碍了。下面再继续学习以下教程,开始学习如何调用其余一些相对来讲比较复杂的接口。

Ø 微信公众平台开发入门教程

Ø 微信公众平台开发—天气预报

Ø 微信公众平台开发—小黄鸡

Ø 微信公众平台开发—人脸识别

Ø 微信公众平台开发—百度地图

Ø 微信公众平台开发—笑话

Ø 微信公众平台开发—在线点歌

Ø 微信公众平台开发—附近查询

Ø 微信公众平台开发—快递物流

Ø 微信公众平台开发—一键关注

当你实验了如上的教程以后,相信官方文档的全部接口调用对你来讲已经小菜一碟了。

二、不须要调用微信内部功能

不须要调用微信内部功能组件的,就如同正常的web页面同样,好比填写表单进行进行注册、点击按钮进行跳转等等,这些都是正常的web请求,按照正常的web开发方法走便可。

(十)Python面试概念和代码

(一)、这两个参数是什么意思:args,*kwargs?咱们为何要使用它们?

答:若是咱们不肯定往一个函数中传入多少参数,或者咱们但愿以元组(tuple)或者列表(list)的形式传参数的时候,咱们可使用args(单星号)。若是咱们不知道往函数中传递多少个关键词参数或者想传入字典的值做为关键词参数的时候咱们可使用*kwargs(双星号),args、kwargs两个标识符是约定俗成的用法。

另外一种答法:当函数的参数前面有一个星号号的时候表示这是一个可变的位置参数,两个星号表示这个是一个可变的关键词参数。星号把序列或者集合解包(unpack)成位置参数,两个星号把字典解包成关键词参数。

(二)、谈一谈Python的装饰器(decorator)

装饰器本质上是一个Python函数,它可让其它函数在不做任何变更的状况下增长额外功能,装饰器的返回值也是一个函数对象。它常常用于有切面需求的场景。好比:插入日志、性能测试、事务处理、缓存、权限校验等。有了装饰器咱们就能够抽离出大量的与函数功能无关的雷同代码进行重用。

有关于具体的装饰器的用法看这里:装饰器 - 廖雪峰的官方网站

(三)、简要描述Python的垃圾回收机制(garbage collection)

Python中的垃圾回收是以引用计数为主,标记-清除和分代收集为辅。

引用计数:Python在内存中存储每一个对象的引用计数,若是计数变成0,该对象就会消失,分配给该对象的内存就会释放出来。

标记-清除:一些容器对象,好比list、dict、tuple,instance等可能会出现引用循环,对于这些循环,垃圾回收器会定时回收这些循环(对象之间经过引用(指针)连在一块儿,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边)。

分代收集:Python把内存根据对象存活时间划分为三代,对象建立以后,垃圾回收器会分配它们所属的代。每一个对象都会被分配一个代,而被分配更年轻的代是被优先处理的,所以越晚建立的对象越容易被回收。

若是你想要深刻了解Python的GC机制,点击这里:[转载]Python垃圾回收机制--完美讲解!

(四)、Python多线程(multi-threading)。这是个好主意吗?

Python并不支持真正意义上的多线程,Python提供了多线程包。Python中有一个叫Global Interpreter Lock(GIL)的东西,它能确保你的代码中永远只有一个线程在执行。通过GIL的处理,会增长执行的开销。这就意味着若是你先要提升代码执行效率,使用threading不是一个明智的选择,固然若是你的代码是IO密集型,多线程能够明显提升效率,相反若是你的代码是CPU密集型的这种状况下多线程大部分是鸡肋。

(五)、 说明os,sys模块不一样,并列举经常使用的模块方法?

官方文档:

os模板提供了一种方便的使用操做系统函数的方法

sys模板可供访问由解释器使用或维护的变量和与解释器交互的函数

另外一种回答:

os模块负责程序与操做系统的交互,提供了访问操做系统底层的接口。sys模块负责程序与Python解释器的交互,提供了一系列的函数和变量用户操做Python运行时的环境。

(六)、什么是lambda表达式?它有什么好处?

简单来讲,lambda表达式一般是当你须要使用一个函数,可是又不想费脑壳去命名一个函数的时候使用,也就是一般所说的匿名函数。

lambda表达式通常的形式是:关键词lambda后面紧接一个或多个参数,紧接一个冒号“:”,紧接一个表达式。lambda表达式是一个表达式不是一个语句。

(七)、Python中pass语句的做用是什么?

pass语句不会执行任何操做,通常做为占位符或者建立占位程序

(八)、Python是如何进行类型转换的?

Python提供了将变量或值从一种类型转换为另外一种类型的内置方法。

(九)、Python里面如何拷贝一个对象?

Python中对象之间的赋值是按引用传递的,若是要拷贝对象须要使用标准模板中的copy

copy.copy:浅拷贝,只拷贝父对象,不拷贝父对象的子对象。

copy.deepcopy:深拷贝,拷贝父对象和子对象。

(十)、__new__和__init__的区别。

__init__为初始化方法,__new__方法是真正的构造函数。

__new__是实例建立以前被调用,它的任务是建立并返回该实例,是静态方法

__init__是实例建立以后被调用的,而后设置对象属性的一些初始值。

总结:__new__方法在__init__方法以前被调用,而且__new__方法的返回值将传递给__init__方法做为第一个参数,最后__init__给这个实例设置一些参数。

(十一)、Python中单下划线和双下划线分别是什么?

__name__:一种约定,Python内部的名字,用来与用户自定义的名字区分开,防止冲突

_name:一种约定,用来指定变量私有

__name:解释器用_classname__name来代替这个名字用以区别和其余类相同的命名

想要更加详细的了解这二者的区别,请点击:Python中的下划线(译文)

(十二)、说一说Python自省。

自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型。简单一句话就是运行时可以得到对象的类型。好比:type()、dir()、getattr()、hasattr()、isinstance()

有关于元类以及单例模式会在后面文章中作详细的解释说明。

相关文章
相关标签/搜索