一、Pillow
官方文檔
https://pillow.readthedocs.org/
縮放
from PIL import Image
# 打開一個jpg圖像文件,注意是當(dāng)前路徑:
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')
模糊
from PIL import Image, ImageFilter
# 打開一個jpg圖像文件俏扩,注意是當(dāng)前路徑:
im = Image.open('test.jpg')
# 應(yīng)用模糊濾鏡:
im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.jpg', 'jpeg')
image
驗(yàn)證碼
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
# 隨機(jī)字母:
def rndChar():
return chr(random.randint(65, 90))
# 隨機(jī)顏色1:
def rndColor():
return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
# 隨機(jī)顏色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))
# 創(chuàng)建Font對象:
font = ImageFont.truetype('Arial.ttf', 36)
# 創(chuàng)建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')
code.jpg
二篮幢、requests
GET
>>> import requests
>>> r = requests.get('https://www.douban.com/') # 豆瓣首頁
>>> r.status_code
200
>>> r.text
r.text
'<!DOC...
帶參數(shù)的URL,傳入dict作為params參數(shù)
>>> r = requests.get('https://www.douban.com/search', params={'q': 'python', 'cat': '1001'})
>>> r.url # 實(shí)際請求的URL
'https://www.douban.com/search?q=python&cat=1001'
自動檢測編碼
>>> r.encoding
'utf-8'
無論響應(yīng)是文本還是二進(jìn)制內(nèi)容宿百,我們都可以用content屬性獲得bytes對象:
>>> r.content
b'<!DOCTYPE html>\n<。洪添。垦页。
對于特定類型的響應(yīng),例如JSON干奢,可以直接獲取
>>> r = requests.get('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20%3D%202151330&format=json')
>>> r.json()
{'query': {'count': 1, 'created': '2017-11-17T07:14:12Z', ...
需要傳入HTTP Header時痊焊,我們傳入一個dict作為headers參數(shù)
>>> r = requests.get('https://www.douban.com/', headers={'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'})
>>> r.text
<!DOCTYPE html>。忿峻。薄啥。
POST
要發(fā)送POST請求,只需要把get()方法變成post()逛尚,然后傳入data參數(shù)作為POST請求的數(shù)據(jù)
>>> r = requests.post('https://accounts.douban.com/login', data={'form_email': 'abc@example.com', 'form_password': '123456'})
requests默認(rèn)使用application/x-www-form-urlencoded對POST數(shù)據(jù)編碼垄惧。如果要傳遞JSON數(shù)據(jù),可以直接傳入json參數(shù):
params = {'key': 'value'}
r = requests.post(url, json=params) # 內(nèi)部自動序列化為JSON
上傳文件
>>> upload_files = {'file': open('report.xls', 'rb')}
>>> r = requests.post(url, files=upload_files)
在讀取文件時绰寞,注意務(wù)必使用'rb'即二進(jìn)制模式讀取到逊,這樣獲取的bytes長度才是文件的長度铣口。
把post()方法替換為put(),delete()等觉壶,就可以以PUT或DELETE方式請求資源脑题。
獲取請求頭
>>> r.headers
{Content-Type...
cookie
>>> r.cookies['ts']
'example_cookie_123。铜靶。叔遂。'
要在請求中傳入Cookie,只需準(zhǔn)備一個dict傳入cookies參數(shù):
>>> cs = {'token': '12345', 'status': 'working')
>>> r = requests.get(url, cookies=cs)
傳入以秒為單位的timeout參數(shù):
>>> r = requests.get(url, timeout=2.5) # 2.5秒后超時
三争剿、chardet
官方文檔
https://chardet.readthedocs.io/en/latest/supported-encodings.html
>>> import chardet
>>> chardet.detect(b'Hello, world!')
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
檢測出的編碼是ascii已艰,注意到還有個confidence字段,表示檢測的概率是1.0(即100%)蚕苇。
>>> data = '離離原上草哩掺,一歲一枯榮'.encode('gbk')
>>> chardet.detect(data)
{'encoding': 'GB2312', 'confidence': 0.7407407407407407, 'language': 'Chinese'}
獲取到編碼后,再轉(zhuǎn)換為str捆蜀,就可以方便后續(xù)處理
四疮丛、psutil
官網(wǎng)地址
https://github.com/giampaolo/psutil
獲取CPU信息、獲取內(nèi)存信息辆它、獲取磁盤信息誊薄、獲取網(wǎng)絡(luò)信息、獲取進(jìn)程信息等等锰茉。呢蔫。
例:獲取CPU信息
>>> import psutil
>>> psutil.cpu_count() # CPU邏輯數(shù)量
4
>>> psutil.cpu_count(logical=False) # CPU物理核心
2
# 2說明是雙核超線程, 4則是4核非超線程