未写完,待更新.

回顾python编程

IO编程

文件读写

open函数的mode参数

功能描述

‘r’

读模式

‘w’

写模式

‘a’

追加模式

‘b’

二进制模式(可添加到其他模式使用)

‘+’

读写模式(可添加到其他模式使用)

操作文件和目录

python中对文件和目录的操作经常用到os模块和shutil模块

shutil模块可以复制文件夹、复制文件、移动文件、删除目录

其他的对操作文件和目录的操作用的是os模块

序列化操作

序列化:把内存中的变量变成可存储或可传输的过程

在python中提供两个模块:cPickle和pickle来实现序列化,前者是由C语言编写的,效率比后者高很多,但是两个模块的功能是一样的。

现在流行的是序列化为JSON格式1

2

3

4try:

import cPickle as pickle

except:

import pickle

进程和线程

多进程

python实现多进程的主要方式有两种,一种方法是使用os模块中的fork方法,另一种是方法是使用multiprocessing模块

1.使用os模块中的fork方式实现多进程

fork方法调用一次,返回两次,原因在于操作系统将当前进程(父进程)复制出一份进程(子进程)。子进程中永远返回0,父进程中返回的是子进程的ID

其中os模块的getpid方法用于获取当前进程的ID,getppid方法用于获取父进程的ID。

2.使用multiprocessing模块创建进程


以上两种方法只适用于创建少量的子进程,要启动大量的子进程,可以用进程池Pool

3.multiprocessing模块提供一个Pool类来代表进程池对象



Pool对象调用join()方法会等待所有子进程执行完毕,调用jion()之前必须先调用close(),调用close()之后就不能继续添加新的Process了

4.进程通信

python提供了多种进程间通信的方式,列入:Queue、Pipe、Value+Array等。主要讲解Queue和Pipe这两种方式。这两个区别在于:Pipe常用于两个进程间通信,Queue用来在多个进程间实现通信。

Queue通信方式。Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递。

有两个方法:Put和Get可以进行Queue操作:


Pipe通信机制,Pipe常用来在两个进程进行通信,两个进程分别位于管道的两端。


多线程

多线程类似于同时执行多个不同程序,多线程运行有如下的优点:

1.可以把运行时间长的任务放到后台能去处理。

2.程序运行速度更快

3.用户界面可以更加吸引人

python提供了两个模块:thread和threading,thread是低级模块,threading是高级模块。

用threading模块创建多线程

第一种方式是把一个函数传入并创建Thread实例,然后调用start方法开始执行。



第二种欧冠方式从threading.Thread继承创建线程类。



线程同步

使用Thread对象的Lock和RLock可以实现简单的线程同步,这两个对象都有acquire和release方法

RLock对象允许一个线程多次对其进行acquire操作,因为其内部通过一个counter变量维护着线程acquire的次数,而且每一次的acquire操作必须有一个release操作与之对象,在所有的release操作完成之后,别的线程才能申请RLock队象。



全局解释器锁(GIL)


协程

分布式进程

网络编程

1.socket类型

2.Socket函数

TCP编程

UDP编程

WEB前端基础

初识网络爬虫

爬虫概述

HTTP请求的python实现

urllib2/urllib 实现

httplib/urllib 实现

更人性化的requests

一个完整的请求与响应模板

以Get方式1

2

3import requests

r = reqests.get('http://www.baidu.com')

print r.content

r.content返回的是字节形式

以post方式1

2

3

4import requests

postdata = {'key':'value'}

r = requests.post('http://www.xxxx.com/login',data = postdata)

print r.content

1

2

3

4import requests

payload = {'Keywords':'blog:qiyeboy','pageindex':1}

r = requests.get('', params = payload)

print r.url

响应与编码1

2

3

4

5

6import requests

r = requests.get('http://www.baidu.com')

print r.content

print r.encoding

r.encoding = 'utf-8'

print r.text

编码:chardet1

2

3

4

5import requests

r = requests.get('http://www.baidu.com')

print chartdet.detect(r.content)

r.encoding = chardet.detect(r.content)['encoding']

print r.text

请求头的处理


响应码code和响应头headers处理


Cookie 处理



重定向与历史消息


超时设置1requests.get('http://github.com',timeout = 20)

代理设置


HTML解析大法

初识Firebug

RE正则

基本语法的使用

入门小例子

常用元字符


字符转义

如果你想查找元字符本身的话,因为它们具有特定功能,没办法把它们指定为普通字符。这个时候就需要用到转义,使用“”来取消这些字符的特殊意义。

重复


字符集合

正则表达式是通过[]来实现自定义字符集合,[abcd]就是匹配abcd中的任意一个字符,[.,!]匹配标点符号

分支条件

如果满足其中任意一种规则都应该当成匹配,具体方法是用“|”把不同的规则分隔开。

分组

IP地址的匹配:((25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d){3}(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d))

反义


后向引向


零宽断言

零宽断言共有四种形式:前两种形式是正向零宽断言,后两种是负向零宽断言

正向零宽断言的两种形式:



负向零宽断言的两种形式:


注释


贪婪与懒惰


处理选项


python与正则


python通过re模块提供对正则表达式的支持。使用re的一般步骤是:

1.先将正则表达的字符串形式编译为Pattern实例

2.然后使用Pattern实例处理文本并获得匹配结果

3.最后使用Match实例获得信息,进行其他操作

主要方法:


参数flag是匹配模式,取值可以使用按位或运算符”|”表示同时生效。

flag的可选值如下:


re.match(pattern,string[,flags])


总结:re.match()方法从开头开始匹配,若开头没有匹配成功,则返回none,反之获取匹配的结果

re.search(pattern,string[,flags])


总结:search()会扫描整个string查找匹配

re.split(pattern,string[,maxsplit])


re.findall(pattern,string[,flags])


re.finditer(pattern,string[,flags])


re.sub(pattern,repl,string[,count])


re.subn(pattern,repl,string[,count])


Match对象的属性和方法



函数调用的方式


强大的Beautiful Soup

解析器比较


Beautiful Soup的使用

快速开始



对象种类

共有4种对象:

1.Tag

2.NavigableString

3.BeautifulSoup

4.Comment

遍历子文档树

null

搜索文档树

null

CSS选择器

null

lxml的XPath解析

数据存储

hTML正文抽取

存储为JSON

见daomu.py

存储为CSV

见daomu1.py

多媒体文件抽取

见duomeiti.py

Email提醒

见Email.py

实战项目:基础爬虫

基础爬虫架构及运行原理

基础爬虫:功能简单,仅考虑功能的实现,未涉及优化和稳健性的考虑。

基础爬虫框架:主要包括五大模块,分别为爬虫调度器、URL管理器、HTML下载器、HTML解析器、数据存储器。



URL管理器

主要包括两个变量:一个是已爬取URL的集合,另一个是未爬取URL的集合。pythonset类型,主要是使用set的去重功能,防止链接重复爬取,因为爬取链接重复时容易造成死循环。

解决方案大概有三种:

1.内存去重

2.关系数据库去重

3.缓存数据库去重

爬取数量较大时,缓存数据库去重,爬取数量较小时采用内存去重


代码见:URLManager.py

HTML下载器

见HTMLDownload.py

HTML解析器

见HtmlParser.py

数据存储器

见DataOutput.py

爬虫调度器

见SpiderMan.py

所有文件在firstSpider文件下

简单分布式爬虫

简单分布式爬虫结构



数据库存储

讲解了python对SQLite、MySQL、MongoDB的操作

动态网站抓取

Ajax和动态html

了解Ajax和动态html的定义和原理

动态爬虫1:爬取影评信息

PhantomJS

PhantomJS是一个基于Webkit的服务器端JavaScript API.它支持web而无需浏览器支持,不仅运行快,原生支持各种标准:DOM处理、CSS选择器、JSON、Canvas,和SVG。

Selenium

Selenium是一个自动化测试工具,支持各种浏览器,包括Chrome、Safari、Firebox等

爬取去哪网

web端协议分析

10.1 网页登录POST分析

登录之后才能进行页面爬取的情况,属于深层次的网页爬取

隐藏表单分析

加密数据分析