简介

Python 是通过 module 组织代码的,一个 py 文件就是一个 module,module 又是通过 package 来组织的,package 是一个包含 init.py 的文件夹,代码,module,package 它们三者的关系就是:module 包含代码,package 至少包含一个为 init.py 的 module。

1
2
3
4
5
package
├── __init__.py
├── submodule.py
└── subpackage
    └── __init__.py

Python 的 package 以及 package 中的 init.py 共同决定了 package 中的 module 是如何被外界访问的。

Other

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
math
collections: from collections import Iterable #collections是Python内建的一个集合模块,提供了许多有用的集合类。
functools: from functools import reduce
import re # 正则匹配
import socket # socket
import tesserocr  # 图片识别模块,一般直接系统调用执行tesserocr更好,因为版本是最新的
from queue import Queue # 队列
from queue import LifoQueue # 栈
import csv # 读写csv文件
import pickle5 as pickle # 序列化模块,将对象持久化的方法,将对象转化为文件保存在磁盘上,在需要的时候再读取并还原。
from selenium import webdriver # 实现python操作浏览器自动化,常用于模拟万能登录
import json # 字符串转json等操作
import execjs # python调用js代码

爬虫加验证码识别使用的module

1
2
3
4
5
6
7
8
import requests #Requests 使用的是 urllib3,因此继承了它的所有特性。Requests 支持 HTTP 连接保持和连接池,支持使用 cookie 保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
from bs4 import BeautifulSoup #最主要的功能是从网页抓取数据
import hashlib #Python的hashlib提供了常见的摘要算法(非加密算法,因为不可解密),如MD5,SHA1等等
import os, time #OS模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作. #time模块是用于处理时间。
import random,string #random是处理随机数。#string 模块提供了一些用于处理字符串类型的函数
from PIL import Image #PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。
from openpyxl import load_workbook #openpyxl:操作Excel文件,兼容office2016
import pymysql #PyMySQL:连接数据库,并实现简单的增删改查。

time

import time

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#日期格式处理
dt = "2016-05-05 20:28:54"
#转换成时间数组struct_time
timeArray = time.strptime(dt, "%Y-%m-%d %H:%M:%S")
#转换成新的时间格式(20160505-20:28:54)
dt_new = time.strftime("%Y%m%d-%H:%M:%S",timeArray)

#时间戳格式处理,获取当前时间
timestamp = time.time()
#时间戳转换成时间数组struct_time
time_local = time.localtime(timestamp)
#转换成新的时间格式(2016-05-05 20:28:54)
dt = time.strftime("%Y-%m-%d %H:%M:%S",time_local)

#时间元组转换成时间戳
timestamp = time.time()
time.mktime(time.localtime(timestamp, '%Y-%m-%d %H:%M:%S'))

logging

可以非常容易地记录错误信息,通过配置,logging还可以把错误记录到日志文件里,方便事后排查 logging.exception(e)

hashlib

Python的hashlib提供了常见的摘要算法(非加密算法,因为不可解密),如MD5,SHA1等等

PIL Image: (pillow)

  1. PIL中有九种不同模式。分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。
  2. 对于彩色图像,不管其图像格式是PNG,还是BMP,或者JPG,在PIL中,使用Image模块的open()函数打开后,返回的图像对象的模式都是“RGB”。而对于灰度图像,不管其图像格式是PNG,还是BMP,或者JPG,打开后,其模式为“L”。
  3. 对于PNG、BMP和JPG彩色图像格式之间的互相转换都可以通过Image模块的open()和save()函数来完成

pytesseract

识别图片文本,直接执行终端命令tesseract来识别验证码的方式识别率会高很多

  1. 要安装pytesseract库,必须先安装其依赖的PIL及tesseract-ocr,其中PIL为图像处理库,而后面的tesseract-ocr则为google的ocr识别引擎。

  2. Tesseract-OCR:提高图像转文本的识别率的方法:

    • 安装jTessBoxEditor, 通过训练,提高图片信息的识别率
    • 对验证码图片进行处理:彩色转灰度,灰度转二值,二值图像识别,同时图片放大,提高ocr识别率
  3. 验证码图像识别技术主要是操作图片内的像素点,通过对图片的像素点进行一系列的操作,最后输出验证码图像内的每个字符的文本矩阵。

    • 读取图片
    • 图片降噪
    • 图片切割
    • 图像文本输出

os

  1. os.mkdir(path), os.chdir(path),os.path.exists(path),
  2. os.system(‘cat /proc/cpuinfo’) #执行命令,没有返回值和输出

random

  1. 作用是返回随机数,只要跟随机元素相关的,都可以使用它。

  2. 重要函数:

    • random() 返回0<=n<1之间的随机实数n;
    • choice(seq) 从序列seq中返回随机的元素;
    • getrandbits(n) 以长整型形式返回n个随机位;
    • shuffle(seq[, random]) 原地指定seq序列;
    • sample(seq, n) 从seq中选择n个随机且独立的元素;【seq包含string/list/tuple】

进程

1
2
3
from multiprocessing import Process # 创建新进程
from multiprocessing import Pool  # 进程池
import subprocess  # 调用外部进程

线程

1
import threading  # threading.current_thread() : 返回线程实例

re模块

  1. regex = re.compile(pattern, flags=0) # 用来编译正则表达式模式字符串,并生成Regular Expression Objects,flags经常使用re.I表示不区分大小写

  2. ret_list = re.findall(regex, string, flags=0) # 查找所有匹配的值并返回一个list

  3. ret = re.search(regex, string, flags =0) # 匹配任意位置的模式串 ret = re.match(regex, string, flags=0) # 只匹配位于字符串开始位置的模式串.如果想要匹配任意位置的模式串,可以使用re.search() print(ret.group()) # 打印match匹配到的值

  4. re.fullmatch(regex, string, flags=0) # 返回一个和模式串完全匹配的字符串

  5. re.split(pattern, string, flags=0)

  6. ret.group(1) # 正则分组,参数为1,返回第1个组对应的字符串

  7. re.sub(pattern, repl, string, count=0) # 用于替换字符串的匹配项

    • 第一个参数:规则
    • 第二个参数:替换后的字符串
    • 第三个参数:字符串
    • 第四个参数:替换个数。默认为0,表示每个匹配项都替换
  8. re.escape(string) # 将字符串所有特殊正则表达式字符转义

urllib模块

  1. quote/quote_plus:字符串url编码

    1
    2
    3
    4
    5
    
    >>> from urllib import parse
    >>> parse.quote('a&b/c')  #未编码斜线
    'a%26b/c'
    >>> parse.quote_plus('a&b/c')  #编码了斜线
    'a%26b%2Fc'
    
  2. unquote/unquote_plus: 字符串url解码

    1
    2
    3
    4
    5
    
    from urllib import parse
    >>> parse.unquote('1+2')  #不解码加号
    '1+2'
    >>> parse.unquote_plus('1+2')  #把加号解码为空格
    '1 2'
    
  3. urlencode:参数url编码

    1
    2
    3
    4
    5
    6
    7
    
    >>> from urllib import parse
    >>> query = {
    'name': 'walker',
    'age': 99,
    }
    >>> parse.urlencode(query)
    'name=walker&age=99'
    
  4. parse.urlparse(url):url解码

csv 模块

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    
    >>> import csv
    >>> with open('names.csv') as csvfile:
    ...     reader = csv.DictReader(csvfile)
    ...     for row in reader:
    ...         print(row['first_name'], row['last_name'])
    ...
    Baked Beans
    Lovely Spam
    Wonderful Spam
    
  2. 1
    2
    3
    4
    5
    6
    7
    8
    
    import csv
    with open('names.csv', 'w') as csvfile:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
    writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})