一、什么是网络编程
使用Python进行网络编程,就是通过Python打开一个网站,或者请求一个http接口。可以通过标准模块urllib实现,也可以通过更简单易用的第三方模块requests实现。
二、urllib
1 # 1、没有入参的get请求 2 import json 3 from urllib import request,parse 4 url = 'http://www.baidu.com' 5 req = request.urlopen(url) # 打开一个url,发get请求 6 content = req.read().decode() # 获取返回结果,返回结果是bytes类型需要加decode() 7 fw = open('baidu.html','w',encoding='utf-8') # 创建一个html文件 8 fw.write(content) # 将返回的内容写入html文件 9 10 # 2、有入参的get请求 11 url = 'http://api.nnzhp.cn/api/user/stu_info?stu_name=小黑' 12 req = request.urlopen(url) # 打开一个url,发get请求 13 content = req.read().decode() # 获取返回结果,返回结果是bytes类型需要加decode() 14 res_dic = json.loads(content) # 将返回的json串转换为字典 15 if res_dic.get('error_code') == 0: # 根据返回的error_code判断测试是否通过 16 print('测试通过') 17 else: 18 print('测试不通过') 19 20 # 3、post请求 21 url = 'http://api.nnzhp.cn/api/user/login' 22 data = {'username':'niuhanyang','passwd':'aA123456'} # 请求数据 23 data = parse.urlencode(data) # 自动拼好参数username=niuhanyang&passwd=aA123456 24 req = request.urlopen(url,data.encode()) # 发post请求,请求数据需要转成bytes类型 25 print(req.read().decode()) # 获取返回结果,返回结果是bytes类型需要加decode()
三、requests
1 # 1、发get请求 2 import requests 3 url = 'http://api.nnzhp.cn/api/user/stu_info' 4 data = {'stu_name':'小黑'} # 请求数据 5 req = requests.get(url,params=data) # 发get请求 6 print(req.json()) # 字典 7 print(req.text) # string类型json串 8 9 # 2、发post请求 10 url = 'http://api.nnzhp.cn/api/user/login' 11 data = {'username':'niuhanyang','passwd':'aA123456'} # 请求数据 12 req = requests.post(url,data) # 发post请求 13 print(req.json()) # 字典 14 print(req.text) # string类型json串 15 16 # 3、入参是json类型的post请求 17 import random 18 phone = random.randint(10000000000,99999999999) 19 url = 'http://api.nnzhp.cn/api/user/add_stu' 20 data = { 21 "name":"小A", 22 "grade":"天蝎座", 23 "phone":phone, 24 "sex":"男", 25 "age":28, 26 "addr":"河南省济源市北海大道32号" 27 } # 请求数据 28 req = requests.post(url,json=data) # 发post请求 29 print(req.json()) # 字典 30 print(req.text) # string类型json串 31 32 # 4、post请求,添加cookie 33 url = 'http://api.nnzhp.cn/api/user/gold_add' 34 data = {'stu_id':467,'gold':'1000'} 35 cookie = {'niuhanyang':'337ca4cc825302b3a8791ac7f9dc4bc6'} 36 req = requests.post(url,data,cookies=cookie) # 发post请求 37 print(req.json()) # 字典 38 39 # 5、post请求,添加header 40 url = 'http://api.nnzhp.cn/api/user/all_stu' 41 header = {'Referer':'http://api.nnzhp.cn/'} 42 req = requests.get(url,headers=header) 43 print(req.json()) # 字典 44 45 # 6、上传文件 46 url = 'http://api.nnzhp.cn/api/file/file_upload' 47 # data = {'file':open('baidu.html',encoding='utf-8')} # 文件中有中文的话要用encoding='utf-8' 48 data = {'file':open('QQ截图20180512164822.jpg','rb')} # 打开图片要用rb模式 49 req = requests.post(url,files=data) 50 print(req.json()) # 字典 51 52 # 7、下载图片/网页/文件 53 url = 'http://www.nnzhp.cn/wp-content/uploads/2018/01/soup.jpg' # 图片地址 54 # url = 'http://www.nnzhp.cn/archives/140' # 网页地址 55 # url ='http://up.mcyt.net/?down/46779.mp3' # mp3地址 56 req = requests.get(url) # 发送get请求 57 # print(req.content) #content就是返回的二进制文件内容 58 fw = open('s.jpg','wb') # 'wb'二进制写模式,下载图片 59 # fw = open('s.html','wb') # 下载网页 60 # fw = open('song.mp3','wb') # 下载音乐 61 fw.write(req.content)