未写完,待更新.
回顾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分析
登录之后才能进行页面爬取的情况,属于深层次的网页爬取
隐藏表单分析
加密数据分析