Python3基础笔记之6:扩展模块

Python3扩展模块

【课程26】引用扩展模块(import)

模块(Module):模块就是程序。每个扩展名为.py的Python程序都是一个独立的模块。模块能定义函数、类和变量,让你能够有逻辑地组织你的Python代码段。

包(package):组织模块。放在一个文件夹里的模块集合。

模块引用方式:(1)import [as ]。将模块中的函数等名称导入当前程序。在调用模块中的函数的时候,需要加上模块的命名空间。可以给导入的命名空间替换一个新的名字。引用方法:.。(2)from import 。引入模块中的某个函数。调用时不需要再加上命名空间。

命名空间(namespace):表示标识符(identifier)的可见范围。一个标识符可以在多个命名空间中定义,在不同命名空间中的含义互不相干。

dir()函数:列出名称的属性

help()函数:显示参考手册

Python语言标准库:在安装Python时就默认已经安装好的模块。

数字和数学模块

numbers:数字抽象基类

math:数学函数

cmath:复数的数学函数

decimal:十进制定点和浮点算术

fractions:有理数

random:生成伪随机数

statistics:数学统计功能

数据类型

datetime:基本日期和时间类型

calendar:与日历相关的一般功能

collections:容器数据类型

heapq:堆队列算法

bisect:数组二分算法

array:高效的数值数组

weakref:弱引用

types:动态类型创建和内置类型的名称

copy:浅层和深层复制操作

pprint:格式化输出

reprlib:备用repr()实现

enum:支持枚举

功能编程模块

itertools:为高效循环创建迭代器的函数

functools:可调用对象的高阶函数和操作

operator:标准运算符作为函数

数据持久化

pickle:Python对象序列化

copyreg:注册pickle支持功能

shelve:Python对象持久化

marshal:内部Python对象序列化

dbm:与Unix“数据库”的接口

sqlite3:SQLite数据库的DB-API 2.0接口

数据压缩和存档

zlib:与gzip兼容的压缩

gzip/bz2:支持gzip/bzip2文件

lzma:使用LZMA算法进行压缩

zipfile:使用ZIP存档

tarfile:读取和写入tar归档文件

文件格式

csv:CSV文件读写

configparser:配置文件解析器

netrc:netrc文件处理

xdrlib:对XDR数据进行编码和解码

plistlib:生成并解析Mac OS X.plist文件

文件和目录访问

pathlib:面向对象的文件系统路径

os.path:常见的路径名操作

fileinput:迭代多个输入流中的行

stat:解释stat()结果

filecmp:文件和目录比较

tempfile:生成临时文件和目录

glob:Unix样式路径名模式扩展

fnmatch:Unix文件名模式匹配

linecache:随机访问文本行

shutil:高级文件操作

macpath:Mac OS 9路径操作函数

通用操作系统服务

os:其他操作系统接口

io:用于处理流的核心工具

time:时间访问和转换

argparse:用于命令行选项,参数和子命令的解析器

getopt:用于命令行选项的C风格解析器

logging:Python的日志记录工具

getpass:便携式密码输入

curses:字符单元格显示的终端处理

platform:访问底层平台的标识数据

errno:标准errno系统符号

ctypes:Python的外部函数库

并发执行

threading:基于线程的并行性

multiprocessing:基于进程的并行性

concurrent.futures:启动并行任务

subprocess:子流程管理

sched:事件调度程序

queue:同步的队列类

_thread:低级线程API

加密服务

hashlib:安全哈希和消息摘要算法接口

hmac:用于消息身份验证的密钥哈希算法

secrets:生成用于管理机密的安全随机数

网络和进程间通信

asyncio:异步I/O

socket:低级网络接口

ssl:套接字对象的TLS/SSL包装器

select:等待I/O完成

selectors:高级I/O复用

asyncore:异步套接字处理程序

asynchat:异步套接字命令/响应处理程序

signal:设置异步事件的处理程序

mmap:内存映射文件支持

互联网数据处理

email:电子邮件和MIME处理包

json:JSON编码器和解码器

mailcap:Mailcap文件处理

mailbox:以各种格式处理邮箱

mimetypes:将文件名映射到MIME类型

base64:Base16/Base32/Base64/Base85数据编码

binhex:对binhex4文件进行编码和解码

binascii:在二进制和ASCII之间转换

quopri:对MIME引用的可打印数据进行编码和解码

uu:对uuencode文件进行编码和解码

互联网协议和支持

webbrowser:Web浏览器控制器

cgi:通用网关接口支持

cgitb:CGI脚本的回溯管理器

wsgiref:WSGI实用程序和参考实现

urllib:URL处理模块

http:HTTP模块

ftplib/poplib/imaplib/nntplib/smtplib:

FTP/POP3/IMAP4/NNTP/SMTP协议客户端

smtpd:SMTP服务器

telnetlib:Telnet客户端

socketserver:网络服务器的框架

xmlrpc:XMLRPC服务器和客户端模块

ipaddress:IPv4/IPv6操作库

多媒体服务

audioop:处理原始音频数据

aifc:读写AIFF和AIFC文件

sunau:读取和写入Sun AU文件

wave:读写WAV文件

chunk:读取IFF分块数据

colorsys:颜色系统之间的转换

imghdr:确定图像的类型

sndhdr:确定声音文件的类型

ossaudiodev:访问兼容OSS的音频设备

结构化标记处理工具

html:超文本标记语言支持

xml:XML处理模块

程序框架

turtle —海龟作图库

cmd —支持面向行的命令解释器

shlex —简单的词法分析

图形用户界面

tkinter:Tcl/Tk的Python接口

【课程27】datetime模块

主要的类:可对date、time、datetime三种时间模式进行单独管理。

datetime.date()处理日期(年月日)

datetime.time()处理时间(时分秒、毫秒)

datetime.datetime()处理日期+时间

备注:datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。

strptime():用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:

>>> from datetime importdatetime

>>> cday =datetime.strptime('2017-8-1 18:20:20', '%Y-%m-%d %H:%M:%S')

>>> print(cday)

strftime():后台提取到datetime对象后,要把datetime对象格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的,同样需要一个日期和时间的格式化字符串:

>>> from datetime import datetime

>>> now = datetime.now()

>>> print(now.strftime('%a, %b %d %H:%M'))

时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。

将日期转换成时间戳

timetuple()函数:将时间转换成struct_time格式

time.mktime()函数:返回用秒数来表示时间的浮点数

时间上的加减法datetime.timedelta()处理时段(时间间隔),表示两个时间点的间隔

【课程28】calendar模块

calendar模块:跟日历相关的若干函数和类,可以生成文本形式的日历。

常用函数:

calendar.calendar()返回多行字符串,一整年

calendar.month(,)返回多行字符串,一个月

calendar.prmonth(,)相当于print(calendar.month (,))

calendar.prcal()相当于print (calendar.prcal ())

将日历列表化:calendar.monthcalendar()。返回某一年的某一个月份日历,是一个嵌套列表。最里层的列表含有七个元素,代表一周(从周一到周日)。如果没有本月的日期,则为。

与日历相关的计算:

判别闰年calendar.isleap():普通闰年:能被4整除但不能被100整除的年份。世纪闰年:能被400整除的年份。

计算某月共有多少天,从周几开始calendar.monthrange(,):从开始,依次为周一、周二…

计算某天是周几calendar.weekday(,,):返回值为0~6,依次对应的是周一到周日。

【课程29】time模块

获取时间戳:time.time()方法。时间戳的用处:测试程序运行时间。

获取当前时间:time.asctime()或time.ctime()

将元组数据转化为日期:t = (2018, 8, 13, 11, 42, 31, 0, 0, 0)。time.asctime(t)。这一系列的数值分别对应年、月、日、时、分、秒、周几、一年中的第几天、是否为夏令时间。

struct_time类:time.localtime()。

利用索引获取时间信息:t = time.localtime()。year = t[0]#年。

让程序运行到某处便暂停几秒:time.sleep()

【课程30】几个算术模块

math模块:支持浮点数运算

math.sin()/math.cos()/math.tan()

math.pi #Π = 3.14159…

math.log(x,a) #以a为底的x的对数

math.pow(x,y) #xy

cmath模块:支持复数运算

cmath.polar() #极坐标

cmath.rect() #笛卡尔坐标

cmath.exp(x) #e^x

cmath.log(x,a) #以a为底的x的对数

cmath.log10(x) #以10为底x的对数

cmath.sqrt(x) #x的平方根。

decimal模块:小数-固定精度的浮点值

生成小数:from decimal import Decimal。Decimal('0.1')。

小数计算:Decimal('0.1')+Decimal('0.1')+Decimal('0.10')-Decimal('0.3')。

fractions模块:分数-实现了一个有理数对象

生成分数:from fractions import Fraction。Fraction(1,4)/Fraction('0.25')。

浮点数转换为分数:Fraction.from_float(1.75)。尽管可以把浮点数转换为分数,在某些情况下,这么做会有不可避免的精度损失,因为这个数字在其最初的浮点形式上是不精确的。

random模块:伪随机数

计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可预见的。随机数种子相同,随机数的序列也是相同的。

random.seed(a=None)设置随机数种子

random.random()生成范围在[0,1)之间的随机实数

random.uniform()生成指定范围的内的随机浮点数

random.randint(m,n)生成指定范围[m,n]内的整数

random.randrange(a,b,n)可以在[a,b)范围内,按n递增的集合中随机选择一个数

random.getrandbits(k)生成k位二进制的随机整数

random.choice()从指定序列中随机选择一个元素

random.sample()能指定每次随机元素的个数

random.shuffle()可以将可变序列中所有元素随机排序

【课程31】持久化模块

临时性对象:类创建的对象并不是真正的数据库记录。存储在内存而不是文件中。关闭python,实例将消失。

对象持久化:对象在创建它们的程序退出之后依然存在。

对象持久化的标准库模块:

pickle:任意Python对象格式化和解格式化

dbm:实现一个可通过键访问的文件系统,以存储字节串

shelve:按照键把pickle处理后的对象存储到一个文件中

shelve模块:提供基本的存储操作,通过构造一个简单的数据库,像操作字典一样按照键存储和获取本地的Python对象,使其可以跨程序运行而保持持久化。键必须是字符串,且是唯一的。值是任何类型的Python对象。数据处理不支持类似SQL的查询工具,但只要通过键获取到保存在文件的对象,就可以像正常的数据对象一样处理。与字典类型的区别:一开始必须打开shelve,并且在修改后需要关闭它。

常用操作:

1.将任何数据对象,保存到文件中去d = shelve.open(filename)。open函数在调用时返回一个shelf对象,通过该对象可以存储内容。

2.类似字典形式访问,可读可写

d[key] =data #写

value=d[key]#读

del d[key]#删

3.操作完成后,记得关闭文件d.close()

【课程32】文件文本读写模块

普通文件:数据持久化的最简单类型。仅仅是在一个文件名下的字节流,把数据从文件读入内存,从内存写入文件。

文件的打开:内置open()函数:f = open(filename[,mode[,buffering]])

f: open()返回的文件对象

filename:文件的字符串名

mode:可选参数,打开模式和文件类型

mode第一个字母表明对其的操作:

‘r’表示读模式(默认)

‘w’表示写模式

‘x’表示在文件不存在的情况下新创建并写文件

‘a’表示在文件末尾追加写内容

‘+’表示读写模式

mode第二个字母是文件类型

‘t’表示文本类型

‘b’表示二进制文件

buffering:可选参数,文件的缓冲区,默认为-1

文件的写操作

f.write(str):写入字符串

f.writelines(strlist):写入字符串列表

文件的读操作

f.read():每次读取整个文件,生成文件内容的字符串表示

f.readline():返回一行,每次只读取一行

f.readlines():返回所有行的列表,每次读取整个文件

文件的关闭:文件打开后要记得关闭。关闭的作用是终止对外部文件的连接,同时将缓存区的数据刷新到硬盘上。调用close()方法:f.close()

使用上下文管理器(contextmanager):确保在退出后自动关闭文件。

with open(‘textfile’,’rt’) as myfile:

myfile.read()

结构化文本文件:

(1)CSV:纯文本文件,以“,”为分隔符。值没有类型,所有值都是字符串。不能指定字体颜色等样式。不能指定单元格的宽高,不能合并单元格。没有多个工作表。不能嵌入图像图表。

文件读取-reader:re = csv.reader()。接受一个可迭代对象(比如csv文件),能返回一个生成器,可以从其中解析出内容。

文件读取-DictReader:re = csv.DictReader()。与reader类似。但返回的每一个单元格都放在一个元组的值内。

文件写操作:w = csv.writer()。w.witerow(rows)。当文件不存在时,自动生成。支持单行写入和多行写入。

字典数据写入:w = csv.DictWriter()。w.writeheader()。w.writerow(rows)。

(2)EXCEL:openpyxl模块用来读写扩展名为xlsx/xlsm/xltx/xltm的文件。Workbook类是对工作簿的抽象。Worksheet类是对表格的抽象。Cell类是对单元格的抽象文件写操作。

操作之前先导入第三方库openpyxl模块:

安装:pip install openpyxl

导库:from openpyxl import workbook

创建Excel文件:一个Workbook对象代表一个Excel文档,使用该方法创建一个Worksheet对象后才能打开一个表。

from openpyxl import Workbook

wb = Workbook()

ws = wb.active

读取Excel文件:

from openpyxl import load_workbook

wb = load_workbook(filename)

获取单元格信息:获取Cell对象。

c = wb[‘sheet’][‘A1’]

c = wb[‘sheet’].cell(row=1,column=1)

c.coordinate :返回单元格坐标

c.value :返回单元格的值

c.row :返回单元格所在的行坐标

c.column :返回单元格所在列坐标

(3)PDF:PyPDF2库包含了PdfFileReader、PdfFileMerger、PageObject和PdfFileWriter四个主要类。能进行读写、分割、合并、文件转换等多种操作。只能从PDF文档中提取文本并返回为字符串,而无法提取图像、图表或其他媒体。

读取PDF文件

readFile = open('test.pdf','rb')

pdfFileReader = PdfFileReader(readFile)

pdfFileReader类

.getNumPages():计算PDF文件总页数

.getPage(index):检索指定编号的页面

PDF文件的写操作

writeFile = 'output.pdf'

pdfFileWriter = PdfFileWriter()

pdfFileWriter类

.addPage(pageObj):根据每页返回的

PageObject,写入到文件

.addBlankPage():在文件的最后一页后面写入一个空白页,保存到新文件

合并多个文档

pdf_merger = PdfFileMerger()

pdf_merger.append('python2018.pdf')

pdf_merger.merge(20, 'insert.pdf')

pdf_merger.write('merge.pdf')

单个页面操作–PageObject类

.extractText():按照顺序提取文本

.getContents():访问页面内容

.rotateClockwise(angle):顺时针旋转

.scale(sx,sy):改变页面大小

【课程33】简单图形界面模块(easygui)

图形用户界面GUI:人机交互的图形化界面设计,包括展示数据用的小控件、输入的方法、菜单、按钮以及窗口等。用户通过鼠标、键盘等输入设备操纵屏幕上的图标或菜单选项,来执行选择命令、调用文件、启动程序等日常任务。

easygui模块:可以显示各种对话框、文本框、选择框与用户交互。

功能演示:easygui.egdemo()

消息窗口easygui.msgbox():显示一条消息和提供一个"OK"按钮。用户可以指定任意的消息和标题,甚至重写"OK"按钮的内容。

按钮选项easygui.choicebox():为用户提供了一个可选择的列表,使用序列(元组或列表)作为选项。

显示文本easygui.textbox():用于显示文本内容。text参数可以是字符串、列表或元组类型。

输入密码easygui.passwordbox():类似于enterbox(),但是用户输入的内容是用"*"显示出来。

打开文件easygui.fileopenbox():返回用户选择的文件名(带完整路径)。Default参数指定了一个默认路径。

实现简单的图形界面程序:互动小游戏

import easygui as g

import sys

while 1:

g.msgbox('欢迎进入')

msg = '你想学习什么?'

title = '互动小游戏'

choices = ['琴棋书画', '四书五经', '编程', '数学', 'English']

choice =g.choicebox(msg,title,choices)

g.msgbox('你选择的是'+str(choice),'结果') # convert the choice to string

# in case the user cancelled thechoice, and we got None.

msg = '你希望重新选择吗?'

title = '请选择'

if g.ccbox(msg,title): #show acontinue/cancel dialog

pass # user choose continue

else:

sys.exit(0) # user choosecancel

【课程34】海龟作图模块(turtle)

海龟作图turtle模块:Python内置,随时可用。其意象为模拟海龟在沙滩上爬行而留下的足迹。从LOGO语言借鉴而来。

属性:位置、方向、画笔(颜色、线条宽度等)

指令:画笔运动命令:前/后移动、左/右转动、作画速度等。画笔控制命令:抬起/放下、画笔宽度、画笔颜色、填充颜色等。

调用递归画树:先画树干,再画右树枝,最后画左树枝:与递归函数里的流程一致。

#分形树

#导入turtle模块

import turtle

#定义画树的函数

def tree(branchLen,t): # t为海龟

if branchLen >= 5: #最小规模为5

if branchLen

t.pencolor('green') #设置画笔颜色为绿色

else: #规模在50以上,树干

t.pencolor('brown') #设置画笔颜色为棕色

t.forward(branchLen) #画树干

if branchLen

t.color('red','pink')

# t.pencolor('red')

# t.fillcolor('pink')

t.begin_fill() #开始填充

t.circle(5) #画半径为5的圆

t.end_fill() #结束填充

t.right(25) #右倾25度

tree(branchLen-15,t) #减小规模,树干减15

t.left(50) #回左倾50度

tree(branchLen-15,t)

if branchLen

t.pencolor('green') #设置画笔颜色为绿色

else: #规模在50以上,树干

t.pencolor('brown') #设置画笔颜色为棕色

t.right(25) #回右倾25度,回正

t.backward(branchLen) #海龟回到原位置

#定义主函数

def main():

t = turtle.Turtle() #创建一支画笔

win = turtle.Screen()

turtle.tracer(0) #关闭绘画动画

#画笔位置调整

t.left(90) #海龟向左旋转90度,指向正北

t.up() #抬笔

t.backward(300) #后退100

t.down() #落笔

t.pensize(3) #设置画笔粗细为3

t.color('brown') #设置画笔颜色为棕色

tree(135,t) #画树,树干长度为100

turtle.update() #打开绘画动画

win.exitonclick()

#调用主函数

main()

【课程35】图像处理库(PIL)

Pillow库:Python里的图像处理库。PIL即PythonImage Library。功能强大,可以对图像做各种处理。缩放、裁剪、旋转、滤镜、文字、调色板等等。

图像处理步骤

1.打开图像

image.open()

Pillow库能自动根据文件内容确定格式

若图片在程序目录下,则不需要附带路径,直接将图像名+文件格式作为参数

2.处理图像

image模块中提供了大量处理图像的方法

3.存取或显示图像

im.show()

im.save()

PIL生成缩略图:thumbnail(size, Image.ANTIALIAS)函数。参数size为一个元组,指定生成缩略图的大小。直接对内存中的原图进行了修改,但是修改完后的图片需要保存,处理后的图片不会被拉伸。

from PIL import Image

#打开一个jpg图像文件,注意是当前路径

im = Image.open('test.jpg')

#获得图像尺寸:

w, h = im.size

print('Original image size: %sx%s' % (w, h))

#缩放到50%:

im.thumbnail((w//2, h//2))

print('Resize image to: %sx%s' % (w//2, h//2))

#把缩放后的图像用jpeg格式保存:

im.save('thumbnail.jpg', 'jpeg')

PIL生成模糊效果图像:filter(ImageFilter.BLUR)函数。

from PIL import Image, ImageFilter

#打开一个jpg图像文件,注意是当前路径

im = Image.open('test.jpg')

#应用模糊滤镜

im2 = im.filter(ImageFilter.BLUR)

im2.save('blur.jpg', 'jpeg')

PIL给图片添加文字

from PIL import Image,ImageDraw,ImageFont

#打开程序目录下的图片test.jpg

img=Image.open('test.jpg')

#设置待添加文字大小为100,字体为隶书SIMLI.TTF

font=ImageFont.truetype('SIMLI.TTF',100)

#在img上创建可绘图对象draw

draw=ImageDraw.Draw(img)

#添加红色文字'未名湖畔好读书'

draw.text((100,10),'未名湖畔好读书',(255,0,0),font=font)

#保存图片

img.save('未名湖畔好读书.jpg','jpeg')

PIL生成验证码

from PIL import Image, ImageDraw, ImageFont, ImageFilter

import random

#随机字母:

def rndChar():

return chr(random.randint(65,90))

#随机颜色1:

def rndColor():

return (random.randint(64, 255),random.randint(64, 255), random.randint(64, 255))

#随机颜色2:

def rndColor2():

return (random.randint(32, 127),random.randint(32, 127), random.randint(32, 127))

# 240 x 60:

width = 60 * 4

height = 60

image = Image.new('RGB', (width, height), (255, 255, 255))

#创建Font对象:

font = ImageFont.truetype('Arial.ttf', 36)

#创建Draw对象:

draw = ImageDraw.Draw(image)

#填充每个像素:

for x in range(width):

for y in range(height):

draw.point((x, y),fill=rndColor())

#输出文字:

for t in range(4):

draw.text((60 * t + 10, 10),rndChar(), font=font, fill=rndColor2())

#模糊:

image = image.filter(ImageFilter.BLUR)

image.save('code.jpg', 'jpeg')

【课程36】Web服务框架(Flask)

Web应用:Web应用已经成为目前最热门的应用软件形式。Web应用通过Web服务器提供服务,客户端采用浏览器或者遵循HTTP协议的客户端。由于需要处理HTTP传输协议,很多Web开发框架涌现。

框架:Web服务器会处理与浏览器客户端交互的HTTP协议具体细节,但对具体内容的处理还需要自己编写代码。一个Web框架至少要具备处理浏览器客户端请求和服务端响应的能力。

框架的特性:

路由:解析URL并找到对应的服务端文件或者Python服务器代码。

模板:把服务端数据合并成HTML页面。

认证和授权:处理用户名、密码和权限。

会话Session:处理用户在多次请求之间需要存储的数据。

框架可能具备这些特性中的一种或多种。

Flask框架:Flask是一种非常容易上手的Pythonweb开发框架,功能强大,支持很多专业Web开发需要的扩展功能。如Facebook认证和数据库集成。只需要具备基本的Python开发技能,就可以开发出一个web应用来。

表单插件Flask-WTF:使用Flask-WTF时,每个表单都抽象成一个类。

一个Web服务器测试:在浏览器中访问http://127.0.0.1:5000/,这个服务器会返回一行文本。

#Flask框架-一个Web服务器测试

#引入Flask类,Flask类实现了一个WSGI应用

from flask import Flask

#app是Flask的实例,它接收包或者模块的名字作为参数,但一般都是传递__name__

app=Flask(__name__)

#使用app.route装饰器会将URL和执行的视图函数的关系保存到app.url_map属性上

#处理URL和视图函数的关系的程序就是路由,这里的视图函数就是hello

@app.route('/')

def hello():

return 'hello world'

#使用这个判断可以保证当其他文件引用这个文件的时候(例如“from hello import app”)

#不会执行这个判断内的代码,也就是不会执行app.run函数

if __name__=='main':

#执行app.run就可以启动服务了

#默认Flask只监听虚拟机的本地127.0.0.1这个地址,端口为5000

app.run()

【课程37】网络爬虫(requests, Beautiful Soup)

爬虫(搜索引擎蜘蛛):爬虫是按照一定规则,自动地提取并保存网页中信息的程序。蜘蛛沿着网络抓取猎物,通过一个节点之后,顺着该节点的连线继续爬行到下一个节点,最终爬完整个网络的全部节点。通过向网站发起请求获取资源,提取其中有用的信息。

requests库:Python实现的一个简单易用的HTTP库。支持HTTP持久连接和连接池、SSL证书验证、cookies处理、流式上传等。向服务器发起请求并获取响应,完成访问网页的步骤。简洁、容易理解,是最友好的网络爬虫库。

http请求类型:返回的是一个response对象。

requests.request():构造一个请求

requests.get():获取HTML网页

requests.head():获取HTML网页头信息

requests.post():提交POST请求

requests.put():提交PUT请求

requests.patch():提交局部修改请求

requests.delete():提交删除请求

requests.options():获取http请求

response对象:包含服务器返回的所有信息,例如状态码、编码形式、文本内容等;也包含请求的request信息。

.status_code:HTTP请求的返回状态

.text:HTTP响应内容的字符串形式

.content:HTTP响应内容的二进制形式

.encoding:(从HTTPheader中)分析响应内容的编码方式

.apparent_encoding:(从内容中)分析响应内容的编码方式

定制请求头:requests的请求接口有一个名为headers的参数,向它传递一个字典来完成请求头定制。

设置代理:一些网站设置了同一IP访问次数的限制,可以在发送请求时指定proxies参数来替换代理,解决这一问题。

Beautiful Soup页面解析器:使用requests库下载了网页并转换成字符串后,需要一个解析器来处理HTML和XML,解析页面格式,提取有用的信息。

搜索方法:find_all(name,attrs,recursive,string,**kwargs)返回文档中符合条件的所有tag,是一个列表。find(name,attrs,recursive,string,**kwargs)相当于find_all()中limit=1,返回一个结果。name:对标签名称的检索字符串。attrs:对标签属性值的检索字符串。recursive:是否对子节点全部检索,默认为True。string:...中检索字符串。**kwargs:关键词参数列表。

爬虫的基本流程

1.分析网页结构;

2.爬取页面:通过requests库向目标站点发送请求,若对方服务器正常响应,能够收到一个response对象,它包含了服务器返回的所有信息。

3.解析页面:

HTML代码-网页解析器。

Json数据-json模块,转换成Json对象。

二进制数据-以wb形式写入文件,再做进一步处理。

此处使用bs4进行解析。

#举例:爬取猫眼网站上的电影信息

import requests

from bs4 import BeautifulSoup

#我们用选择器来选择我们需要获取的内容

def get_info(soup):

imgs = soup.select('dd.board-img') #这是获取图片链接

names = soup.select('dd.board-item-main .name') #这是获取电影名字

starses = soup.select('dd.board-item-main .movie-item-info .star') #这是获取电影主演

times = soup.select('dd.board-item-main .movie-item-info .releasetime') #这是获取电影上映时间

scores = soup.select('dd.board-item-main .score-num')

films = [] #存储一个页面的所有电影信息

for x in range(0, 10):

#这个是获取属性的链接

img = imgs[x]['data-src']

#下面的都是获取标签的内容并去掉两端空格

name =names[x].get_text().strip()

stars =starses[x].get_text().strip()[3:] #使用切片是去掉主演二字

time =times[x].get_text().strip()[5:] #使用切片是去掉上映时间二字

score =scores[x].get_text().strip()

film = {'name': name, 'stars': stars,'img': img, 'time': time, 'score': score}

films.append(film)

pages = soup.select('.list-pagerli a') #可以看到下一页的链接在最后一个a标签

page =pages[len(pages)-1]['href']

return films, page

url_start = 'http://maoyan.com/board/4'

page = ''

while True:

response = requests.get(url_start+ page)

soup =BeautifulSoup(response.text, 'lxml')

films, page = get_info(soup)

#写个json文件吧,这样容易点

with open('猫眼电影top250.json', 'a', encoding='utf-8') as f:

for film in films:

f.write(str(film)+'\n')

if '下一页' not in response.text: #下一页不在就表示下载完毕

print('所有电影下载完毕')

break

【课程38】数据可视化(numpy, matplotlib)

numpy矩阵处理库:numpy是Python用于处理大型矩阵的一个速度极快的数学库。可以做向量和矩阵的运算,包括各种创建矩阵的方法,以及一般的矩阵运算、求逆、求转置。它的很多底层的函数都是用C写的,可以得到在普通Python中无法达到的运行速度。

矩阵计算:

创建矩阵a = np.matrix([])

矩阵求逆a.I

矩阵转置a.T

矩阵乘法a*b或np.dot(a,b)

对象属性:

np.shape数组形状,矩阵则为n行m列

np.size对象元素的个数

np.dtype指定当前numpy对象的整体数据

matplotlib绘图库:matplotlib是Python的一个绘图库。它包含了大量的工具,可以使用这些工具创建各种图形,如简单的散点图、折线图,甚至三维图形、动画等。matplotlib功能异常强大,Python科学计算社区经常使用它完成数据可视化的工作。

http://matplotlib.org/gallery.html

绘制函数图像基本思路:通过将图像上一些点的坐标连接起来,即可绘制函数的近似图像,当点越多时,所绘图像越接近函数图像。

numpy库的linspace()函数生成数组:numpy.linspace(,,)。生成一个存放等差数列的数组,数组元素为浮点型,包含三个参数,分别是:数列起始值、终止值(默认包含自身)、数列元素个数。

matplotlib库的plot()函数用来画图:可以设定图形颜色、线条线型、以及做标注等。坐标轴标签:plt.xlabel()、plt.ylabel()。图形标题:plt.title()。

散点图:函数scatter(x,y)。(x, y)是点的坐标。

直方图:函数hist(x,n)。x是横坐标,n是条状图的数量。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190217G0ONTH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券