爬虫01:实战学习笔记

一、I/O编程
1、文件读写
(1)打开文件

open(name[.mode[.buffering]])
f = open(r"c:\Python\py17\text.txt")

open函数使用一个文件名作为唯一的强制函数,然后返回一个文件对象,模式(mode)和缓冲区(buffering)参数都是可选的,默认是读模式,默认缓冲区是无
(2)文件模式
一般处理一些其他类型的文件,像MP3和图像,那么应该在模式参数中加“b”
(3)文件缓冲区
参数=0,I/O操作无缓冲,将数据直接写到硬盘上
参数=1,I/O操作有缓冲,数据先写到内存里,只有使用flush函数或者close函数才会将数据更新到硬盘
参数>1,使用默认缓冲区大小
(4)文件读取

with open(r"c:\Python\py17\text.txt","r") as fp:
	for line in fp.readlines():
		print line.strip() 

(5)文件写入

with open(r"c:\Python\py17\text.txt","w") as fp:
	fp.write("qiye")

二、序列化操作
1、定义

d  = dict(url="index.html",title="首页",content="首页")

在程序运行的过程中爬取的页面的链接会不断变化,但是程序一结束或意外中断,程序的内存变量都会被操作系统进行回收,所以把内存中的变量变成可存储或可传输的过程,就是序列化
2、有两个模块:cPickle和pickle来实现序列化

try:
	import cPickle as pickle
except ImportError:
	import pickle

python实现序列化使用的是dumps和dump方法,dumps方法可以将任意对象序列化成一个str,然后将这个str写入文件进行保存,如果使用dump方法,可以将序列化后的对象直接写入文件中

pickle实现反序列化使用的是load和loads方法,把序列化后的文件从磁盘上读取为一个str,然后使用loads方法将这个str反序列化为对象,或者直接使用load方法将文件直接反序列化为对象
三、进程和线程
1、多进程
实现的两种方式,一种是使用os模块中的fork方法,另一种是使用multiprocessing模块,前者只适用于Unix/Linux系统,后者可跨平台使用
(1)使用os模块中的fork方式实现多线程
这个方法比较特殊,普通的方法都是只调用一次,返回一次,它是调用一次,返回两次
(2)使用multiprocessin模块创建多进程
提供一个Process类 来描述一个进程对象

import os
from multiprocessing import Process


def run_func(name):
    print("AAAAAAAAAAAAAAAAAAA(%s)" % name, os.getpid())


if __name__ == '__main__':
    print("VBBBBBBB(%s)" % os.getpid())
    for i in range(5):
        p = Process(target=run_func, args=(str(i)))
        print("aaaaaaa")
        p.start()
    p.join()
    print("qqqqqqqqqqqqq")

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_37411471/article/details/89179527