cookie 和 session

cookie的数据主要是放在 浏览器端, 可以通过抓包看到 cookie的信息。
session 主要是存放在服务器端。 session详细信息抓包抓不到。

处理带有Cookie的接口

通过抓包
image.png
请求的cookie 信息都是存放在 headers 中

根据接口文档


请求方式: Post
请求路径:http://47.100.175.62:3000/user/refresh_token
请求headers:

  1. Cookie: node_club=s%3A61d7ce34f9c9c17ef86fd0c2%24%24%24%24.EG262E%2Bg4LTKHLxdg8V1u235O5kNPTG3O52FbypDY4M; connect.sid=s%3ANVS8dfGjnV_fUbetGQD5mn9CAs_YZQ4s.Y7DH3i%2FWssRSYDyhxa7epnb%2BPuUqWVAQ3d73xBwd1Vw

请求body: 无


使用代码来做

  1. import requests
  2. url = "http://47.100.175.62:3000/user/refresh_token"
  3. # 设置cookie的信息头
  4. headers = {
  5. "Cookie":"node_club=s%3A61d7ce34f9c9c17ef86fd0c2%24%24%24%24.EG262E%2Bg4LTKHLxdg8V1u235O5kNPTG3O52FbypDY4M; connect.sid=s%3ANVS8dfGjnV_fUbetGQD5mn9CAs_YZQ4s.Y7DH3i%2FWssRSYDyhxa7epnb%2BPuUqWVAQ3d73xBwd1Vw"
  6. }
  7. # 给post请求添加 信息头
  8. r = requests.post(url,headers=headers)
  9. print(r.status_code)
  10. print(r.json())

Python下载文件

给定一个资源文件的地址: https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2700138245.jpg

这个是个图片的地址,要将图片下载并保存电脑。

  1. import requests
  2. # 图片,二进制文件
  3. url = "https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2700138245.jpg"
  4. r = requests.get(url)
  5. print(r.status_code)
  6. # 二进制文件可以保存到本地 二进制文件 权限值需要添加b
  7. with open('01.jpg',mode='wb') as file:
  8. # 写入的时候使用 r.content 表示二进制文件
  9. file.write(r.content)

作业

  1. 参考 豆瓣电影接口 https://www.yuque.com/imhelloworld/av0qdq/mrvgpc#xVl2V

根据接口返回的结果,分析结果,并将接口中所有的电影海报下载到本地。


接口信息
请求方式 GET
请求路径:https://movie.douban.com/j/search_subjects
请求参数

  1. type: movie
  2. tag: 华语
  3. page_limit: 50
  4. page_start: 0

下载所有电影海报

  1. import requests
  2. import os
  3. tags = ["热门", "最新", "豆瓣高分", "冷门佳片", "华语", "欧美", "韩国", "日本"]
  4. for tag in tags:
  5. # 创建文件夹路径
  6. dir = os.path.join(os.path.dirname(__file__),tag)
  7. print(dir)
  8. # 如果文件夹的路径不存在,需要创建文件夹
  9. if not os.path.exists(dir):
  10. os.mkdir(dir)
  11. url = "https://movie.douban.com/j/search_subjects"
  12. query_data = {
  13. "type": "movie",
  14. "tag": tag,
  15. "page_limit": 50,
  16. "page_start": 0
  17. }
  18. header = {
  19. "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"
  20. }
  21. r = requests.get(url,params=query_data,headers=header)
  22. # print(r.json())
  23. # 服务器返回的结果
  24. res_data = r.json()
  25. # 拿到所有的电影结果
  26. subjects = res_data["subjects"]
  27. for subject in subjects:
  28. # 电影标题,海报的路径
  29. print(subject["title"],subject["cover"])
  30. # 存放到文件夹
  31. # 每张海报的文件名
  32. filename = os.path.join(dir,subject['title']+'.png')
  33. with open(filename,mode='wb') as file:
  34. # 发送请求 到图片
  35. png_res = requests.get(url=subject["cover"],headers=header)
  36. # 将请求结果的二进制文件放到 文件中
  37. file.write(png_res.content)

代码优化,封装为函数

函数模板

首先需要将函数结果定义出来。

  1. def get_dir(tag):
  2. """
  3. 返回存放海报的目录路径
  4. :return:
  5. """
  6. def get_tags():
  7. """
  8. 获取所有的标签
  9. 发送get请求给 https://movie.douban.com/j/search_tags 地址
  10. :return: [str]
  11. """
  12. def save_cover_to_file(tag):
  13. """
  14. 给定一个标签,根据标签进行搜索对应电影海报
  15. 保存文件的时候,需要给定文件名,文件名就是电影的名字
  16. :param tag: 给定的标签
  17. :return:
  18. """
  19. if __name__ == '__main__':
  20. # 获取所有的 标签
  21. tags = get_tags()
  22. # 下载每一个标签下对应的电影海报
  23. for tag in tags:
  24. save_cover_to_file(tag)

实现操作

  1. import requests
  2. import os
  3. header = {
  4. "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"
  5. }
  6. def get_dir(tag):
  7. """
  8. 返回存放海报的目录路径
  9. :param tag: 标签名字
  10. :return:
  11. """
  12. tag_dir = os.path.join(os.path.dirname(__file__),tag)
  13. # 如果路径不存在 就需要进行创建
  14. if not os.path.exists(tag_dir):
  15. os.mkdir(tag_dir)
  16. return tag_dir
  17. def get_tags():
  18. """
  19. 获取所有的标签
  20. 发送get请求给 https://movie.douban.com/j/search_tags 地址
  21. :return: [str]
  22. """
  23. url = "https://movie.douban.com/j/search_tags"
  24. r = requests.get(url,headers=header)
  25. return r.json()["tags"]
  26. def save_cover_to_file(tag):
  27. """
  28. 给定一个标签,根据标签进行搜索对应电影海报
  29. 保存文件的时候,需要给定文件名,文件名就是电影的名字
  30. :param tag: 给定的标签
  31. :return:
  32. """
  33. url = "https://movie.douban.com/j/search_subjects"
  34. query_data = {
  35. "type": "movie",
  36. "tag": tag,
  37. "page_limit": 50,
  38. "page_start": 0
  39. }
  40. header = {
  41. "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"
  42. }
  43. r = requests.get(url, params=query_data, headers=header)
  44. # print(r.json())
  45. # 服务器返回的结果
  46. res_data = r.json()
  47. # 拿到所有的电影结果
  48. subjects = res_data["subjects"]
  49. for subject in subjects:
  50. # 电影标题,海报的路径
  51. print(subject["title"], subject["cover"])
  52. # 存放到文件夹
  53. # 每张海报的文件名
  54. dir = get_dir(tag) # 存放海报的目录
  55. filename = os.path.join(dir , subject['title'] + '.png')
  56. with open(filename, mode='wb') as file:
  57. # 发送请求 到图片
  58. png_res = requests.get(url=subject["cover"], headers=header)
  59. # 将请求结果的二进制文件放到 文件中
  60. file.write(png_res.content)
  61. if __name__ == '__main__':
  62. # 获取所有的 标签
  63. tags = get_tags()
  64. # 下载每一个标签下对应的电影海报
  65. for tag in tags:
  66. print(f'现在下载{tag}下面所有的海报')
  67. save_cover_to_file(tag)