day19-網絡基礎

一、回顧

import re

1.正則符號

匹配字符:. \w \s \d (\b, ^, $, \B) \W \S \D [][^]
控制次數:* + ? {} *? +? ?? {N,}? {N,M}? {,N}? (在次數后加?代表次數盡可能少的去匹配)
分之:|
分組:() --> 分組,捕獲,重復(\數字)

正則符號的轉義:想要讓有特殊功能的符號表示它本身,就可以通過\去轉義
除了\和-,其他的符號放在[]都表示符號本身

2.re模塊

compile --> 將正則表達式轉換成對象

  • a.匹配相關的:match, fullmatch --> 返回值是匹配對象/None
    span(), start(), end(), group(), string

  • b.查找:search(正則表達式, 字符串) --> 返回值是匹配對象/None
    去字符串中查找滿足正則表達式的子串,如果有只第一個滿足條件的字符串的匹配對象

findall --> 獲取所有滿足正則條件的子串,返回一個元素是字符串的列表。如果正則中有分組,只取分組中的內容
finditer --> 獲取所有滿足正則條件的子串, 返回一個迭代器,迭代器中的內容是匹配對象

  • c.切割
    split --> 按滿足正則條件的子串對字符串進行切割

  • d.替換
    sub(正則表達式, 替換值, 字符串)
    """

re_str = r'\d+(a+)'
result = re.match(re_str, '789aaaa=123=123')
print(result)

print(result.span(1))
print(result.group(1))
print(result.start(1), result.end(1))

re_str = r'\d+.\d+'
re_str = r'\d+[12-3]\d+'
re_str = r'\d+[-123]\d+'
print(re.fullmatch(re_str, '12-34'))

re_str = r'\d\d\w|\s\w+\d|\w{2}'

二、socket服務器

socket又叫套接字,實現網絡通信的兩端就是套接字。分為服務器對應的套接字和客戶端對應的套接字

python通過提供socket標準庫來支持socket編程。
socket編程就是用程序實現服務器和客戶端

import socket

========寫一個服務器程序=======

  • 1.創建服務器對應的套接字對象(買了一個座機機器)
    """
socket(family, type)

family: 設置ip類型 AF_INET(ipv4) -> 默認值 AF_INET6(ipv6)
type:設置傳輸類型 SOCK_STREAM(TCP可靠傳輸) -> 默認值 SOCK_DGRAM(UDP不可靠傳輸)

server = socket.socket()  # 創建一個基于ipv4的可靠傳輸的服務器套接字
  • 2.綁定IP和端口(插電話線-確定電話號碼)
bind((ip, 端口))

ip: 服務器的地址
端口:不同的端口用來區分電腦上不同服務。取值范圍是065535,注意01024屬于著名端口(用來綁定特殊服務端口,不要隨便用)
注意:同一時間同一個端口只能綁定一個服務

server.bind(('10.7.156.97', 8082))
  • 3.監聽請求(交電話費)
    """
    listen(個數) --> 需要通過數字設置服務器一次可以處理最大的請求個數
server.listen(512)
print('開始監聽')
  • 4.讓服務一直處于啟動狀態
while True:
    # 5.接收客戶端的請求(電話響了,接電話)
    """
    執行到accept(),程序會停下來,知道有客戶端在請求這個服務器的時候才會往下執行。返回會話和客戶端的地址
    """
    print('=====')
    conversation, addr = server.accept()
    print(addr)

    # 6.服務器給客戶端發送數據(說話)
    """
    send(data) --> 發送數據
    data: 需要發送的數據,要求是二進制數據(bytes)
    
    a.str 轉 bytes:
    bytes(字符串,encoding='utf-8)
    字符串.encode(編碼方式)
    """
    # message = input('>>>')
    # # message_data = bytes(message, encoding='utf-8')
    # message_data = message.encode('utf-8')
    # conversation.send(message_data)

    # 發送一張圖片
    with open('./files/luffy4.jpg', 'br') as f:
        content = f.read()
        conversation.send(content)
        # 關閉連接
        conversation.close()



    # 7.接收客戶端發送的消息(聽電話)
    """
    recv(字節數) --> 接收從客戶端發送的數據,參數是用來設置一次能接收的最大字節數。返回值是接收到的數據(二進制)
    
    bytes 轉 字符串
    str(二進制,encoding='utf-8')
    二進制.decode(編碼方式)
    
    注意:recv方法也會阻塞線程,程序運行到這兒會停下等,等到對方發送消息為止
    """
    # data = conversation.recv(1024)
    # # re_message = str(data, encoding='utf-8')
    # re_message = data.decode('utf-8')
    # print(re_message)

三、socket客戶端

import socket
  • 1.創建客戶端套接字對象
client = socket.socket()
  • 2.連接服務器
connect(地址)
"""
client.connect(('10.7.156.97', 8080))

while True:
    # 4.給服務器發送消息
    message = input('客戶端:')
    client.send(message.encode('utf-8'))
    if message == '拜拜':
        break

    # 3.接收服務器返回的數據
    re_data = client.recv(1024)
    print('服務器:',re_data.decode('utf-8'))
    if re_data.decode('utf-8') == '拜拜':
        break

四、socket服務器升級

import socket

1.創建服務器套接字

server = socket.socket()

2.綁定地址

server.bind(('10.7.156.97', 8080))

3.監聽

server.listen(100)

讓服務器一直處于運行狀態

while True:
    # 4.接收請求
    conversation, addr = server.accept()
    print(addr)
    # 保持通話
    while True:
        # 接收消息
        message_re = conversation.recv(1024).decode('utf-8')

        print('客戶端(%s): %s' % (addr[0][-2:], message_re))
        if message_re == '拜拜':
            break

        # 發送消息
        message = input('服務器:')
        conversation.send(message.encode('utf-8'))
        if message == '拜拜':
            break

五、接收圖片的客戶端

import socket

client = socket.socket()
client.connect(('10.7.156.97', 8082))

message_re = client.recv(1024)
data = bytes()  # 創建一個空的二進制數據
while message_re:

    # print(message_re)
    data += message_re  # 將每次獲取到的數據疊加
    # print('接收到數據')
    message_re = client.recv(1024)

with open('./new.jpg', 'bw') as f:
    f.write(data)
print('接收完成')

六、request請求

python沒有一個標準庫來支持網絡請求,但是目前有一個第三方庫,支持http請求

import requests

"""
requests.get(url, params) --> 返回服務的響應
url -> 請求地址
params -> 客戶端給服務發送的數據(字典) {參數名:值}
"""

# https://www.apiopen.top/satinApi?type=1&page=1
url = 'https://www.apiopen.top/satinApi'
response = requests.get(url, {'type': 1, 'page': 1})

1.獲取響應頭

print(response.headers)

2.拿二進制形式的響應體

data_bytes = response.content
print(type(data_bytes))

3.拿字符串形式的響應體

data_text = response.text
print(type(data_text), data_text)

4.拿json格式對應python數據

data_json = response.json()
print(type(data_json), data_json['code'],)

下載圖片到本地

response = requests.get('http://wimg.spriteapp.cn/profile/large/2018/02/24/5a90448611639_mini.jpg')
content = response.content
with open('./aa.jpg', 'wb') as f:
    f.write(content)
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容

  • 一、快捷鍵 ctr+b 執行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 5,845評論 2 16
  • 一、復習day18知識 1.正則符號匹配字符:. \w \s \d (\b, ^, $, \B) \W \...
    魅影_0d2e閱讀 320評論 0 1
  • http://python.jobbole.com/85231/ 關于專業技能寫完項目接著寫寫一名3年工作經驗的J...
    燕京博士閱讀 7,601評論 1 118
  • 說了結束,但我不知道用什么樣的方式來迎接,或者也不打算迎接,因為會來到也會過去,就看看一開始到現在,的確有點兒收獲...
    穩兒閱讀 208評論 0 1
  • 大家都知道王安石對孟嘗君的評價并不高,可說是很低,而王安石對孟嘗君的評價是怎樣的,我們可以從王安石的《讀孟嘗君傳》...
    清風南笙閱讀 179評論 0 1