電子郵件編程蕊程、json椒袍、API、天氣藻茂、釘釘機(jī)器人

昨天回顧

  • 正則表達(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ā)送電子郵件

    • 兩步
      1. 配置QQ郵箱, 開啟SMTP服務(wù)的設(shè)置, 獲取驗(yàn)證碼
      2. 編寫 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é)議的接口

requests 模塊

  • 作用

    發(fā)送HTTP 協(xié)議的請(qǐng)求优俘,得到服務(wù)器響應(yīng)的數(shù)據(jù)

    模擬瀏覽器的行為

  • 安裝方法:

    pip3 install requests

  • HTTP 協(xié)議的請(qǐng)求方式:

    1. GET 請(qǐng)求

      相當(dāng)于查看 ,get請(qǐng)求可以獲取網(wǎng)站的數(shù)據(jù),請(qǐng)求參數(shù)通常跟在URL 的后面

    2. POST請(qǐng)求

      原意是創(chuàng)建或者添加掀序, post請(qǐng)求通常用于提交表單或上傳文件等

    https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E9%AA%B0%E5%AD%90&fenlei=256&rsv_pq=854e3d6f00038104&rsv_t=920aUYsotvE%2BTTV%2B4%2Fpf%2Fv1geYxMZTZFzMYCH5Fw%2Bg%2FZaWsk5SmRve30MRQ&rqlang=cn&rsv_enter=1&rsv_dl=ih_2&rsv_sug3=1&rsv_sug1=1&rsv_sug7=001&rsv_sug2=1&rsv_btype=i&rsp=2&rsv_sug9=es_2_1&inputT=7546&rsv_sug4=8033&rsv_sug=9

  • 示例

    使用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

https://oapi.dingtalk.com/robot/send?access_token=5c55ff3b8f338041a4b04e82c13c2fea3ff3edf3844fde2d99261607aae54a57

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末折晦,一起剝皮案震驚了整個(gè)濱河市钥星,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌满着,老刑警劉巖谦炒,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異漓滔,居然都是意外死亡编饺,警方通過(guò)查閱死者的電腦和手機(jī)乖篷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門响驴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人撕蔼,你說(shuō)我怎么就攤上這事豁鲤。” “怎么了鲸沮?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵琳骡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我讼溺,道長(zhǎng)楣号,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任怒坯,我火速辦了婚禮炫狱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剔猿。我一直安慰自己视译,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布归敬。 她就那樣靜靜地躺著酷含,像睡著了一般。 火紅的嫁衣襯著肌膚如雪汪茧。 梳的紋絲不亂的頭發(fā)上椅亚,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音舱污,去河邊找鬼呀舔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛慌闭,可吹牛的內(nèi)容都是我干的别威。 我是一名探鬼主播躯舔,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼省古!你這毒婦竟也來(lái)了粥庄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤豺妓,失蹤者是張志新(化名)和其女友劉穎惜互,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琳拭,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡训堆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了白嘁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坑鱼。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖絮缅,靈堂內(nèi)的尸體忽然破棺而出鲁沥,到底是詐尸還是另有隱情,我是刑警寧澤耕魄,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布画恰,位于F島的核電站,受9級(jí)特大地震影響吸奴,放射性物質(zhì)發(fā)生泄漏允扇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一则奥、第九天 我趴在偏房一處隱蔽的房頂上張望考润。 院中可真熱鬧,春花似錦逞度、人聲如沸额划。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)俊戳。三九已至,卻和暖如春馆匿,著一層夾襖步出監(jiān)牢的瞬間抑胎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工渐北, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阿逃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像恃锉,于是被迫代替她去往敵國(guó)和親搀菩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 上網(wǎng)原理 1破托、爬蟲概念 爬蟲是什麼肪跋? 蜘蛛,蛆土砂,代碼中州既,就是寫了一段代碼,代碼的功能從互聯(lián)網(wǎng)中提取數(shù)據(jù) 互聯(lián)網(wǎng): ...
    riverstation閱讀 8,056評(píng)論 1 2
  • title: python語(yǔ)法練習(xí) 參考阮一峰等多個(gè)文件用來(lái)練習(xí)python基本語(yǔ)法 [TOC] import文件...
    采香行處蹙連錢閱讀 2,375評(píng)論 0 2
  • 爬蟲的基本流程 一萝映、發(fā)送HTTP請(qǐng)求(Request)通過(guò)Python庫(kù)向目標(biāo)站點(diǎn)發(fā)送HTTP請(qǐng)求吴叶,等待服務(wù)器響應(yīng)...
    曉楓_0544閱讀 774評(píng)論 0 0
  • 緣起: 早上和小伙伴提到了說(shuō)自律的最高境界是把構(gòu)造他律,也就是把自己放在一個(gè)受監(jiān)督的環(huán)境下序臂。 于是我想找個(gè)人監(jiān)督我...
    王兵閱讀 8,852評(píng)論 5 7
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月蚌卤,有人笑有人哭,有人歡樂有人憂愁贸宏,有人驚喜有人失落造寝,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評(píng)論 28 53