昨天回顧
-
正則表達(dá)式
- re模塊
-
python 的第三方包
-
在線安裝
pip3 install 包名
pip install 包名
-
pymysql 模塊
subprocess 模塊
多線程 threading 模塊
paramiko 模塊
此模塊實(shí)現(xiàn)了 ssh 客戶端的功能
ssh 命令 可以遠(yuǎn)程登錄一臺(tái)主機(jī)并遠(yuǎn)程操作這臺(tái)主機(jī)
- 安裝 paramiko
pip3 install paramiko
-
示例
# 導(dǎo)入 paramiko 模塊 import paramiko # 創(chuàng)建一個(gè)paramko 客戶端對(duì)象 ssh_clint = paramiko.SSHClient() # 設(shè)置自動(dòng)接受服務(wù)器的主機(jī)密鑰 ssh_clint.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 登陸遠(yuǎn)程主機(jī) ssh_clint.connect('192.168.1.64', # 遠(yuǎn)程主機(jī)的IP username='root', # 遠(yuǎn)程主機(jī)的用戶名 password='root', # 遠(yuǎn)程主機(jī)的密碼 port=22 # ssh 的端口號(hào) ) # 在此處操作遠(yuǎn)程主機(jī) result = ssh_clint.exec_command('id root; id zhangsan') # 在遠(yuǎn)程主機(jī)上執(zhí)行命令 # print('len(result)=', len(result)) # result 綁定三個(gè)文件流對(duì)象的元組 stdout = result[1] # 得到標(biāo)準(zhǔn)輸出 stderr = result[2] # 得到標(biāo)準(zhǔn)錯(cuò)誤輸出 print("標(biāo)準(zhǔn)輸出:", stdout.read().decode()) print("標(biāo)準(zhǔn)錯(cuò)誤輸出:", stderr.read().decode()) ssh_clint.exec_command('mkdir 魏老師的專用文件夾') # 關(guān)閉連接 ssh_clint.close() # 相當(dāng)于在ssh 的內(nèi)部執(zhí)行 exit 命令
python 的電子郵件編程
-
兩個(gè)內(nèi)建模塊
email 模塊, 用于準(zhǔn)備郵件內(nèi)容的模塊 smtplib 模塊驹暑, 用于與郵件服務(wù)器連接并發(fā)送郵件的模塊
-
使用 QQ 郵箱來(lái)發(fā)送電子郵件
- 兩步
- 配置QQ郵箱, 開啟SMTP服務(wù)的設(shè)置, 獲取驗(yàn)證碼
- 編寫 python 程序發(fā)送郵件
- 兩步
-
配置 QQ郵箱的SMTP 服務(wù)
網(wǎng)址: mail.qq.com
-
授權(quán)碼:
aaaa bbbb cccc dddd
實(shí)驗(yàn)手冊(cè)見: http://tedu.weimingze.com/static/py_library/python_email.html
json
json 全稱( Javascript Object Notation) , 是一種輕量級(jí)的數(shù)據(jù)交互格式
json 是基于 Javascript 編程語(yǔ)言的格式
JSON 采用完全獨(dú)立于編程語(yǔ)言的文本格式
標(biāo)準(zhǔn)JSON的合法符號(hào):
{}(大括號(hào))
"(雙引號(hào))
:(冒號(hào))
,(逗號(hào))
[ ](中括號(hào))
Json 的數(shù)據(jù)類型
- 對(duì)象 object
{}
- 數(shù)組 array
[]
- 字符串 string
""
- 數(shù)值 number (整數(shù)和浮點(diǎn)數(shù))
- 布爾值 bool (true/false)
- 空值: null
字典中的兩個(gè)人
[
{
'name': 'weimingze',
'age': 35
},
{
'name': '小王',
'age': 18,
'score': [90, 100, 85]
},
]
JSON中的兩個(gè)人
[
{
"name": "weimingze",
"age": 35
},
{
"name": "小王",
"age": 18,
"score": [90, 100, 85]
},
]
- json 和 Python 的類型和值
Python | Json |
---|---|
dict | {}object(對(duì)象) |
list, tuple | []array數(shù)組 |
str | "" string 字符串 |
int, float | number 數(shù)字 |
True/False | true/false |
None | null |
-
json 模塊
內(nèi)建模塊
import json
json模塊的四個(gè)常用函數(shù)
函數(shù) | 說(shuō)明 |
---|---|
json.dump(obj, fw) | 把python 對(duì)象編碼為json 字符串并寫入文件fw中 |
json.dumps(obj) | 把python 對(duì)象編碼為json 字符串并返回 |
json.load(fr) | 從文件流對(duì)象fr中讀取json數(shù)據(jù)解碼后返回python對(duì)象 |
json.loads(json) | 從json 字符串中解碼Python 對(duì)象 |
示例見:
>>> infos = [
{
'name': 'weimingze',
'age': 35,
'gender': True,
'score': None
},
{
'name': '小王',
'age': 18,
'score': [90, 100, 85]
},
]
>>> infos
[{'name': 'weimingze', 'age': 35, 'gender': True, 'score': None}, {'name': '小王', 'age': 18, 'score': [90, 100, 85]}]
>>>
>>> import json
>>> s = json.dumps(infos) # 將infos 綁定的對(duì)象轉(zhuǎn)為json 的字符串
>>> s
'[{"name": "weimingze", "age": 35, "gender": true, "score": null}, {"name": "\\u5c0f\\u738b", "age": 18, "score": [90, 100, 85]}]'
>>> objs = json.loads(s) # 將 json 的字符串,轉(zhuǎn)為 python 的對(duì)象
>>> objs
[{'name': 'weimingze', 'age': 35, 'gender': True, 'score': None}, {'name': '小王', 'age': 18, 'score': [90, 100, 85]}]
>>> type(objs)
<class 'list'>
API
Application Programming Interface 應(yīng)用程序接口辨赐。在Web中,API 通常指HTTP協(xié)議的接口
-
示例
中國(guó)天氣網(wǎng)查詢天氣情況的 API: http://www.weather.com.cn/data/sk/城市代碼.html
-
城市代碼:
http://www.weather.com.cn/data/sk/101010100.html
# 城市代碼碼表
https://blog.csdn.net/wangqjpp/article/details/39957091
requests 模塊
-
作用
發(fā)送HTTP 協(xié)議的請(qǐng)求优俘,得到服務(wù)器響應(yīng)的數(shù)據(jù)
模擬瀏覽器的行為
-
安裝方法:
pip3 install requests
-
HTTP 協(xié)議的請(qǐng)求方式:
-
GET 請(qǐng)求
相當(dāng)于
查看
,get請(qǐng)求可以獲取網(wǎng)站的數(shù)據(jù),請(qǐng)求參數(shù)通常跟在URL 的后面 -
POST請(qǐng)求
原意是
創(chuàng)建或者添加
掀序, post請(qǐng)求通常用于提交表單或上傳文件等
-
-
示例
使用request模塊獲取網(wǎng)頁(yè)數(shù)據(jù)
>>> import requests # 向 https://www.baidu.com/s?wd=weimingze 發(fā)送GET請(qǐng)求得到響應(yīng) >>> r = requests.get('https://www.baidu.com/s?wd=weimingze') >>> r.text # 得到響應(yīng)內(nèi)容的文本信息 '<html>\r\n<head>\r\n\t<script>\r\n\t\tlocation.replace(location.href.replace("https://","http://"));\r\n\t</script>\r\n</head>\r\n<body>\r\n\t<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>\r\n</body>\r\n</html>' >>> r = requests.get('http://photo.qc188.com/upload/20197/31/24820/l_1_20190731145347532.jpg') >>> r.content # 響應(yīng)的字節(jié)串
-
使用request模塊下載文件
>>> import requests >>> r = requests.get('http://photo.qc188.com/upload/20197/31/24820/l_1_20190731145347532.jpg') >>> r.content # 響應(yīng)的字節(jié)串 # 下載圖片 >>> r = requests.get('http://photo.qc188.com/upload/20197/31/24820/l_1_20190731145347532.jpg') >>> >>> with open('benz.jpg', 'wb') as fw: ... fw.write(r.content) # 將 響應(yīng)的內(nèi)容(bytes) 寫入文件 ... 155157
-
用request模塊獲取 中國(guó)天氣網(wǎng)的json 數(shù)據(jù)
>>> import requests >>> url = 'http://www.weather.com.cn/data/sk/101010100.html' >>> r = requests.get(url) >>> r.content # 返回字節(jié)串 b'{"weatherinfo":{"city":"\xe5\x8c\x97\xe4\xba\xac","cityid":"101010100","temp":"27.9","WD":"\xe5\x8d\x97\xe9\xa3\x8e","WS":"\xe5\xb0\x8f\xe4\xba\x8e3\xe7\xba\xa7","SD":"28%","AP":"1002hPa","njd":"\xe6\x9a\x82\xe6\x97\xa0\xe5\xae\x9e\xe5\x86\xb5","WSE":"<3","time":"17:55","sm":"2.1","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB"}}' >>> r.json() # 將字節(jié)串帆焕,轉(zhuǎn)化為python 的對(duì)象,相當(dāng)于 json.loads(r.content.decode()) {'weatherinfo': {'city': '?\x8c\x97?o?', 'cityid': '101010100', 'temp': '27.9', 'WD': '?\x8d\x97é£\x8e', 'WS': '?°\x8f?o\x8e3?o§', 'SD': '28%', 'AP': '1002hPa', 'njd': '?\x9a\x82?\x97\xa0??\x9e?\x86μ', 'WSE': '<3', 'time': '17:55', 'sm': '2.1', 'isRadar': '1', 'Radar': 'JC_RADAR_AZ9010_JB'}} >>> r.encoding # 查看當(dāng)前的字符編碼 'ISO-8859-1' >>> r.encoding = 'utf8' # 將編碼改為 UTF-8 >>> r.json() {'weatherinfo': {'city': '北京', 'cityid': '101010100', 'temp': '27.9', 'WD': '南風(fēng)', 'WS': '小于3級(jí)', 'SD': '28%', 'AP': '1002hPa', 'njd': '暫無(wú)實(shí)況', 'WSE': '<3', 'time': '17:55', 'sm': '2.1', 'isRadar': '1', 'Radar': 'JC_RADAR_AZ9010_JB'}}
-
requests.get ()為連接添加查詢字符串使用params 字典完成
import requests url = 'https://www.sogou.com/web' # https://www.sogou.com/web?query=linux s = input('請(qǐng)輸入查詢的內(nèi)容:') params = {'query': s} r = requests.get(url, params=params) # 發(fā)出get請(qǐng)求不恭,傳入 ?query=s 查詢字符串 # 相當(dāng)于請(qǐng)求:https://www.sogou.com/web?query=linux with open('sogou_' + s + '.html', 'wb') as fw: fw.write(r.content) # 把 r.content 字節(jié)串寫入文件 # https://www.sogou.com/web?query=linux s = input('請(qǐng)輸入查詢的內(nèi)容:') params = {'query': s} r = requests.get(url, params=params) # 發(fā)出get請(qǐng)求叶雹,傳入 ?query=s 查詢字符串 # 相當(dāng)于請(qǐng)求:https://www.sogou.com/web?query=linux with open('sogou_' + s + '.html', 'wb') as fw: fw.write(r.content) # 把 r.content 字節(jié)串寫入文件
-
request 可以通過(guò) headers 傳遞請(qǐng)求頭
url = 'https://www.sogou.com/web' params = {'query': 'linux'} headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36' } # 帶上 'User-Agent' 請(qǐng)求頭,把自己偽裝成瀏覽者 r = requests.get(url, params=params, headers=headers) r.text # 返回網(wǎng)頁(yè)的內(nèi)容
完整代碼:
import requests
url = 'https://www.sogou.com/web'
# https://www.sogou.com/web?query=linux
s = input('請(qǐng)輸入查詢的內(nèi)容:')
params = {'query': s}
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'
} # 帶上 'User-Agent' 請(qǐng)求頭,把自己偽裝成瀏覽者
r = requests.get(url, params=params, headers=headers) # 發(fā)出get請(qǐng)求财饥,傳入 ?query=s 查詢字符串
# 相當(dāng)于請(qǐng)求:https://www.sogou.com/web?query=linux
with open('sogou_' + s + '.html', 'wb') as fw:
fw.write(r.content) # 把 r.content 字節(jié)串寫入文件
python 實(shí)驗(yàn)
自己實(shí)現(xiàn)
阿里云開發(fā)者平臺(tái)
網(wǎng)址: www.aliyun.com
實(shí)驗(yàn)手冊(cè)參見: http://tedu.weimingze.com/static/py_library/python_ali_api.html
AppCode:
e3e8438c45584a768f11eef0a99f2b9a
- 示例代碼
import requests
# API 的地址
url = 'http://jisuqgtq.market.alicloudapi.com/weather/query'
# 請(qǐng)求頭
headers = {
# 根據(jù)API的要求,定義相對(duì)應(yīng)的Content - Type
'Content-Type': 'application/json; charset=UTF-8',
# 權(quán)限指定 APPCODE
'Authorization': 'APPCODE e3e8438c45584a768f11eef0a99f2b9a'
}
# 設(shè)置查詢參數(shù)
params = {'citycode': '101010100'} # 城市代碼
r = requests.get(url, headers=headers, params=params)
# print('r.json=', r.text) # json 數(shù)據(jù)
# r 即為相應(yīng)對(duì)象其中包括天氣信息
data = r.json() # data 綁定字典
# print(data)
# 使用pprint 模塊進(jìn)行打印
import pprint
# pprint.pprint(data)
print('今晚的最低溫度:')
pprint.pprint(data['result']['daily'][0]['night']['templow'])
使用釘釘機(jī)器人
實(shí)驗(yàn)手冊(cè):http://tedu.weimingze.com/static/py_library/python_dingtalk.html
webhook API