cookie 和 session
cookie的数据主要是放在 浏览器端, 可以通过抓包看到 cookie的信息。
session 主要是存放在服务器端。 session详细信息抓包抓不到。
处理带有Cookie的接口
通过抓包
请求的cookie 信息都是存放在 headers 中
根据接口文档
请求方式: Post
请求路径:http://47.100.175.62:3000/user/refresh_token
请求headers:
Cookie: node_club=s%3A61d7ce34f9c9c17ef86fd0c2%24%24%24%24.EG262E%2Bg4LTKHLxdg8V1u235O5kNPTG3O52FbypDY4M; connect.sid=s%3ANVS8dfGjnV_fUbetGQD5mn9CAs_YZQ4s.Y7DH3i%2FWssRSYDyhxa7epnb%2BPuUqWVAQ3d73xBwd1Vw
请求body: 无
使用代码来做
import requestsurl = "http://47.100.175.62:3000/user/refresh_token"# 设置cookie的信息头headers = {"Cookie":"node_club=s%3A61d7ce34f9c9c17ef86fd0c2%24%24%24%24.EG262E%2Bg4LTKHLxdg8V1u235O5kNPTG3O52FbypDY4M; connect.sid=s%3ANVS8dfGjnV_fUbetGQD5mn9CAs_YZQ4s.Y7DH3i%2FWssRSYDyhxa7epnb%2BPuUqWVAQ3d73xBwd1Vw"}# 给post请求添加 信息头r = requests.post(url,headers=headers)print(r.status_code)print(r.json())
Python下载文件
给定一个资源文件的地址: https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2700138245.jpg
这个是个图片的地址,要将图片下载并保存电脑。
import requests# 图片,二进制文件url = "https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2700138245.jpg"r = requests.get(url)print(r.status_code)# 二进制文件可以保存到本地 二进制文件 权限值需要添加bwith open('01.jpg',mode='wb') as file:# 写入的时候使用 r.content 表示二进制文件file.write(r.content)
作业
根据接口返回的结果,分析结果,并将接口中所有的电影海报下载到本地。
接口信息
请求方式 GET
请求路径:https://movie.douban.com/j/search_subjects
请求参数
type: movietag: 华语page_limit: 50page_start: 0
下载所有电影海报
import requestsimport ostags = ["热门", "最新", "豆瓣高分", "冷门佳片", "华语", "欧美", "韩国", "日本"]for tag in tags:# 创建文件夹路径dir = os.path.join(os.path.dirname(__file__),tag)print(dir)# 如果文件夹的路径不存在,需要创建文件夹if not os.path.exists(dir):os.mkdir(dir)url = "https://movie.douban.com/j/search_subjects"query_data = {"type": "movie","tag": tag,"page_limit": 50,"page_start": 0}header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"}r = requests.get(url,params=query_data,headers=header)# print(r.json())# 服务器返回的结果res_data = r.json()# 拿到所有的电影结果subjects = res_data["subjects"]for subject in subjects:# 电影标题,海报的路径print(subject["title"],subject["cover"])# 存放到文件夹# 每张海报的文件名filename = os.path.join(dir,subject['title']+'.png')with open(filename,mode='wb') as file:# 发送请求 到图片png_res = requests.get(url=subject["cover"],headers=header)# 将请求结果的二进制文件放到 文件中file.write(png_res.content)
函数模板
首先需要将函数结果定义出来。
def get_dir(tag):"""返回存放海报的目录路径:return:"""def get_tags():"""获取所有的标签发送get请求给 https://movie.douban.com/j/search_tags 地址:return: [str]"""def save_cover_to_file(tag):"""给定一个标签,根据标签进行搜索对应电影海报保存文件的时候,需要给定文件名,文件名就是电影的名字:param tag: 给定的标签:return:"""if __name__ == '__main__':# 获取所有的 标签tags = get_tags()# 下载每一个标签下对应的电影海报for tag in tags:save_cover_to_file(tag)
实现操作
import requestsimport osheader = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"}def get_dir(tag):"""返回存放海报的目录路径:param tag: 标签名字:return:"""tag_dir = os.path.join(os.path.dirname(__file__),tag)# 如果路径不存在 就需要进行创建if not os.path.exists(tag_dir):os.mkdir(tag_dir)return tag_dirdef get_tags():"""获取所有的标签发送get请求给 https://movie.douban.com/j/search_tags 地址:return: [str]"""url = "https://movie.douban.com/j/search_tags"r = requests.get(url,headers=header)return r.json()["tags"]def save_cover_to_file(tag):"""给定一个标签,根据标签进行搜索对应电影海报保存文件的时候,需要给定文件名,文件名就是电影的名字:param tag: 给定的标签:return:"""url = "https://movie.douban.com/j/search_subjects"query_data = {"type": "movie","tag": tag,"page_limit": 50,"page_start": 0}header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"}r = requests.get(url, params=query_data, headers=header)# print(r.json())# 服务器返回的结果res_data = r.json()# 拿到所有的电影结果subjects = res_data["subjects"]for subject in subjects:# 电影标题,海报的路径print(subject["title"], subject["cover"])# 存放到文件夹# 每张海报的文件名dir = get_dir(tag) # 存放海报的目录filename = os.path.join(dir , subject['title'] + '.png')with open(filename, mode='wb') as file:# 发送请求 到图片png_res = requests.get(url=subject["cover"], headers=header)# 将请求结果的二进制文件放到 文件中file.write(png_res.content)if __name__ == '__main__':# 获取所有的 标签tags = get_tags()# 下载每一个标签下对应的电影海报for tag in tags:print(f'现在下载{tag}下面所有的海报')save_cover_to_file(tag)
