Python学习笔记十九_网络编程

  Python操作网络,就是打开一个网站,或者请求一个http接口。可以通过标准模块urllib实现,也可以通过更简单易用的第三方模块requests实现。下面来分别看下通过这俩模块如何实现

一、urllib

urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib和urllib2模块。

req =request.urlopen(url,data.encode())

req.read().decode()

import json
from urllib import request,parse
#没有入参的get请求
url = 'http://www.baidu.com'
req = request.urlopen(url)#打开一个url,发get请求
content = req.read().decode()#获取返回结果,bytes需要decode
fw = open('baidu.html','w',encoding='utf-8')#将文件存成html的格式,可以用浏览器打开
fw.write(content)#最初级的网络爬虫,从其他的网站上,获取一些有用的内容
#有入参的get请求
url='http://127.0.0.1/api/user/stu_info'
data = {'stu_name':'Amy'}#请求数据
data = parse.urlencode(data)#把请求参数变成stu_name=Amy
req=request.urlopen(url+'?'+data)#发get请求
content = req.read().decode()#获取到的是json串
res_dic = json.loads(content)#将json串转为字典
print(res_dic)
#post请求
url = 'http://127.0.0.1/api/user/login'
data = {'username': 'Amy','passwd':'aA123456'}#请求数据
data=parse.urlencode(data)#urlencode,自动给你拼好参数username=Amy&passwd=aA123456
req =request.urlopen(url,data.encode())#发post请求,请求数据(入参)需要转成bytes
print(req.read().decode())#获取返回结果,bytes需要decode

二、requests

  使用urllib去请求网站或者接口,很麻烦,传参需要是bytes类型,得先encode()编码。返回数据也是bytes类型,还得decode()解码。想要把返回结果拿来使用还需要json.loads一下才能转为字典。

  requeste这个第三方模块就比较方便,它需要安装,pip install requests即可。

import requests

#1、发get请求,params=data
url ='http://127.0.0.1/api/user/stu_info'
data ={'stu_name':'Amy'}#请求数据,可以是中文,urllib中不能是中文
req = requests.get(url,params=data)#发get请求
print(req.json())#直接返回字典,不用json.load,也不用decode
print(req.text)#返回的是字符串

#2、发post请求,data
url = 'http://127.0.0.1/api/user/login'
data = {'username': 'Amy','passwd':'aA123456'}
req = requests.post(url,data)
print(req.json())

#3、入参是json类型,json=data
url = 'http://127.0.0.1/api/user/add_stu'
data = {
    "name":"Amy",
    "grade":"天蝎座",
    "phone":'18611222211',
    "sex":"",
    "age":28,
    "addr":"北京"
  }
req = requests.post(url,json = data)
print(req.json)

#4、添加cookie,cookies =cookie
url = 'http://127.0.0.1/api/user/gold_add'
data = {'stu_id':'500','gold':'100'}
cookie = {'Amy':'44df3680451eb4ed96ef9e3a21f1165f'}
req = requests.post(url,data,cookies=cookie)
print(req.json())

# 5、添加header,headers = header
url = 'http://127.0.0.1/api/user/all_stu'
header = {'Referer':'http://api.nnzhp.cn/'}
req = requests.get(url,headers=header)
print(req.json())

#6、上传文件,files =data
url = 'http://127.0.0.1/api/file/file_upload'
data = {
    'file':open('笔记',encoding='utf-8')#传文件
    # 'file':open('Penguins.jpg','rb')#传图片,‘rb'二进制读模式
    # 'file':open('dr.xlsx','rb')#传excel
}
req = requests.post(url,files =data)
print(req.json())

#7、下载文件,或者下载图片,找到文件对应的url
url = 'http://www.nnzhp.cn/wp-content/uploads/2018/01/soup.jpg'#下载图片
# url = 'http://www.nnzhp.cn/archives/140'#下载网页
# url ='http://up.mcyt.net/?down/46779.mp3'#下载音乐
req = requests.get(url)
# print(req.content)#content就是返回的二进制文件
fw = open('s.jpg','wb')#'wb'二进制写模式,下载图片
# fw = open('s.html','wb')#下载网页
# fw = open('song.mp3','wb')#下载音乐
fw.write(req.content)
原文地址:https://www.cnblogs.com/dongrui624/p/9054145.html