一、网络编程
简而言之,就是通过代码打开一个url,获得返回结果并做处理。通常所说的python爬虫,就属于网络编程
二、urllib模块进行网络编程
这个方法很繁琐,不建议使用。了解
示例1:
获取一个网页内容,写入文件
from urllib import request,parse # url = 'http://www.baidu.com' # req = request.urlopen(url) #打开一个url,发get请求 # content = req.read().decode() #获取返回结果,是二进制,需要先decode() # fw = open('baidu.html','w',encoding='utf-8') # fw.write(content)
示例2:
获取接口返回结果,做判断
from urllib import request,parse#导入urllib模块的request和parse import json # url='http://127.0.0.1/api/user/stu_info?stu_name=aaa'eq = request.urlopen(url) #打开一个url,发get请求 # content = req.read().decode() #获取返回结果,二进制,要先解二进制decode()为字符串 # res_dic = json.loads(content) #返回的结果转成字典 # if res_dic.get('error_code') == 0: # print('测试通过') # else: # print('测试失败',res_dic)
示例3:
有参数传入时,用parse拼接参数,请求url,获取结果
from urllib import request,parse url = 'http://api.nnzhp.cn/api/user/login' data = { 'username':'admin', 'passwd':'aA123456' } #请求数据,写成字典格式 data = parse.urlencode(data) #urlencode,自动给你拼好参数 # xx=xx&xx=11 req = request.urlopen(url,data.encode()) #发post请求 print(req.read().decode())
以上看到urllib的用法先对比较麻烦,一步一步操作,必须先打开url,在传入参数,对返回的结果还要在进行处理。
requesets模块已经很好地将这几步封装。用起来更方便
三、requests
这个模块属于第三方模块,需要安装导入。pip install requests
示例1:
发送get请求url
1、发get请求 url = 'http://127.0.0.1/api/user/stu_info' data = {'stu_name':'aaa'} #请求数据,用字典 req = requests.get(url,params=data) #发get请求,直接写入参数url,和传参data即可自动访问网址,并返回数据。注意:get请求的传参必须用格式 params=参数
#req返回的结果,是一个requests.models.Response对象
print(req.json()) #可以把返回数据转换成字典 print(req.text) #把返回数据转换成string,json串
示例2:
发送post请求
url = 'http://127.0.0.1/api/user/login' data = {'username':'aaa','passwd':'123456'} #请求数据,字典封装 req = requests.post(url,data) #发送post请求,可直接传入参数data,不用写params print(req.json())#将结果转换成字典
示例3:
入参就是json格式
url='http://127.0.0.1/api/user/add_stu' data = { "name":"小1", "grade":"天蝎座", "phone":13640000000, "sex":"男", "age":28, "addr":"发斯蒂芬斯蒂芬" }#参数,json串 req = requests.post(url,json=data)#入参是json,在传入参数时要指定 json=参数 print(req.json())
示例4:
带有cookie的post请求
url = 'http://127.0.0.1/api/user/gold_add' data = {'stu_id':468,'gold':10000} djl = {'aaa':'337ca4cc825302b3a8791ac7f9dc4bc6'} req = requests.post(url,data,cookies=djl)#入参带有cookie,在传入参数时,指定 cookies=参数 print(req.json())
示例5:
带有header的get请求
url = 'http://127.0.0.1/api/user/all_stu' header = { 'Referer':'http://127.0.0.1/' } req = requests.get(url,headers=header)#指定 headers=参数 print(req.json())
示例6:
需要上传文件的请求
url= 'http://127.0.0.1/api/file/file_upload' data = { 'file':open(r'C:UsersjniuhanyangDesktop图6bd9026dt935575932465&690.jpg','rb') }#参数,如果上传的是个其他文件,则后面的rb可不写。因为上传的图片会以二进制形式保存,用rb表示读二进制模式。当然如果下载一个文件,则用wb req= requests.post(url,files=data)#指定 files=参数 print(req.json())
示例7:
下载文件
url = 'http://up.mcyt.net/?down/46779.mp3'#要下载文件的url req = requests.get(url) fw = open('aaa.mp3','wb')#mp3格式也是用二进制保存,所以用wb写二进制模式,将对应文件的内容读取到 fw.write(req.content)#将读取到的内容写到一个文件中。这个文件内容就是下载的文件内容。