• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

关闭

返回栏目

关闭

返回python栏目

95 - 第三方库 - requests - 请求库

作者:

贺及楼

成为作者

更新日期:2024-12-02 10:56:39

requests

requests库 的简介

Python 的 requests 库是一个简单易用的HTTP客户端,用于发送各种HTTP请求。它支持会话管理、持久连接、文件上传、Cookie处理等,并且可以自动处理JSON数据。requests 库的API设计直观,文档齐全,使得进行网页内容获取、API交互、网络调试等操作变得轻松。它广泛应用于数据抓取、网络服务测试和自动化脚本中,是Python网络编程中最受欢迎的库之一。

安装 requests库

  1. pip install requests

pip安装requests

包名 中文名 释义 url
requests==2.32.3 / /
├── certifi [required: >=2017.4.17, installed: 2024.8.30] / certifi 是 Python 的标准库,提供 Mozilla 可信任的 CA 证书集合。 /
├── charset-normalizer [required: >=2,<4, installed: 3.3.2] / charset-normalizer 是一个用于自动检测和规范化文本编码的 Python 库。它可以自动检测文本编码,然后将其转换为 Unicode 格式 /
├── idna [required: >=2.5,<4, installed: 3.10] / idna是Python库,用于处理国际化域名(IDN)的编码和解码。 /
└── urllib3 [required: >=1.21.1,<3, installed: 2.2.3] / urllib3是Python的HTTP客户端库,支持连接池、文件上传、长连接、HTTP/HTTPS等功能。 第三方库 - urllib3 - 请求库
  1. 有两种方法,看最后__main__
  2. REQ(url,method) # 普通请求
  3. # REQ_sess() # session对象

使用请求库 requests 例子

  1. import requests
  2. def REQ(url,method,params=None, data=None,headers=None, json_data=None, files=None, cookies=None,
  3. auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None,stream=None, verify=None,cert=None):
  4. try:
  5. print("REQ")
  6. # url
  7. url = url
  8. # 请求方式
  9. method = method
  10. # url ? 后的参数
  11. params = params
  12. # params = {'参数名1':'参数值1', '参数名2':'参数值2'}
  13. # 传输的数据
  14. data = data
  15. # data = {"email":"111111111@163.com", "password":"111111111"}
  16. # 使用application/form-urlencode 方式提交请求
  17. # request.body的内容则为a=1&b=2
  18. # json
  19. json_data = json_data
  20. # 使用application/json方式提交请求
  21. # request.body的内容则为'{"a":1,"b":2}'
  22. # 文件
  23. files = files
  24. # with open('xxx.jpg','rb') as f2:
  25. # files = f2.read()
  26. # 请求头
  27. # headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
  28. headers = headers
  29. cookies = cookies
  30. # web客户端验证
  31. auth = auth
  32. # auth = (账户名, 密码)
  33. # auth=('test', '123456')
  34. # 超时,单位秒,s
  35. timeout = timeout
  36. # 请求连接超时,会触发
  37. # 读取超时,数据大超时,不会触发
  38. # 重定向
  39. allow_redirects = allow_redirects # True/False
  40. # 有的url会自动跳转,所以可以用False来禁止跳转
  41. # 代理
  42. proxies = proxies
  43. # 根据协议类型,选择不同的代理
  44. # proxies = {
  45. # "http": "http://11.11.11.11:1111",
  46. # "https": "http://11.11.11.11:1111", }
  47. # 私密代理, 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式:
  48. # proxy = { "http": "mr_mao_hacker:sffqry9r@11.111.111.111:11111" }
  49. # 钩子函数
  50. hooks = hooks
  51. # hooks = {'response': ResponseHook}
  52. # 捎带执行(钩上)某个自定义的方法
  53. # 还可以定义ResponseHook()函数
  54. # 分段下载
  55. stream = stream
  56. # stream = False # 关闭,默认
  57. # stream = True # 开启
  58. # 返回时验证证书
  59. verify = verify
  60. # 检测是否信任,有时候会看到一些警告的网站会报警告
  61. # verify=True
  62. # True 表示要验证,报错的话会:
  63. # SSLError: ("bad handshake: Error([('SSL routines',
  64. # 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
  65. # 请求时加上证书
  66. cert = cert
  67. # cert=('/path/server.crt', '/path/key')
  68. response = requests.request(method, url,
  69. params=params,
  70. data=data,
  71. headers=headers,
  72. cookies=cookies,
  73. files=files,
  74. auth=auth,
  75. timeout=timeout,
  76. allow_redirects=allow_redirects,
  77. proxies=proxies,
  78. hooks=hooks,
  79. stream=stream,
  80. verify=verify,
  81. cert=cert,
  82. json=json)
  83. # 分段下载
  84. # f = open("file_path", "wb")
  85. # for chunk in response.iter_content(chunk_size=512): # 按照块的大小读取
  86. # # for chunk in response.iter_lines(): # 按照一行一行的读取
  87. # if chunk:
  88. # f.write(chunk)
  89. # response.close() # 关闭连接(因为分段链接没有断)
  90. # 查看响应内容
  91. print(response.text)
  92. # response.text 返回的是Unicode格式的数据
  93. # 查看响应内容
  94. print(response.content)
  95. # response.content返回的字节流数据
  96. # 返回的是服务器响应数据的原始二进制字节流
  97. # 可以用来保存图片等二进制文件
  98. print(response.url) # 查看完整url地址
  99. print(response.encoding) # 查看响应头部字符编码
  100. print(response.status_code) # 查看响应码
  101. # Cookies
  102. cookiejar = response.cookies
  103. # 返回CookieJar对象:
  104. print(cookiejar)
  105. # <RequestsCookieJar[<Cookie BAIDUID=6B3B3B9EAA4D5555F362C3946E555555:FG=1 for .baidu.com/>,
  106. # <Cookie BIDUPSID=6B3B3B9EAA4D2718CA521FA514B1E03E for .baidu.com/>,
  107. # <Cookie H_PS_PSSID=88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111 for .baidu.com/>,
  108. # <Cookie PSTM=1122223333 for .baidu.com/>,
  109. # <Cookie BDSVRTM=0 for www.baidu.com/>,
  110. # <Cookie BD_HOME=1 for www.baidu.com/>]>
  111. # 将CookieJar转为字典:
  112. cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
  113. print(cookiedict)
  114. # {'BAIDUID': '6B3B3B9EAA4D5555F362C3946E555555:FG=1',
  115. # 'BIDUPSID': '6B3A3B9ECC4D2718AC521AC222B1F03E',
  116. # 'H_PS_PSSID': '88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111',
  117. # 'PSTM': '1122223333',
  118. # 'BDSVRTM': '0',
  119. # 'BD_HOME': '1'}
  120. return response
  121. # 获得数据
  122. # data = json.loads(data.text)
  123. # print(data)
  124. except:
  125. print("run方法失败")
  126. raise
  127. def REQ_sess():
  128. try:
  129. print("REQ_sess")
  130. # 数据
  131. data = {"email":"111111111@163.com", "password":"111111111"}
  132. # 请求头
  133. headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
  134. # 1. 创建session对象,可以保存Cookie值
  135. ssion = requests.session()
  136. # 2. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
  137. ssion.post("http://www.renren.com/PLogin.do", data = data)
  138. # 3. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
  139. response = ssion.get("http://www.renren.com/1111111111/profile")
  140. # 查看响应内容
  141. print(response.text)
  142. # response.text 返回的是Unicode格式的数据
  143. # 查看响应内容
  144. print(response.content)
  145. # response.content返回的字节流数据
  146. # 返回的是服务器响应数据的原始二进制字节流
  147. # 可以用来保存图片等二进制文件
  148. # 查看完整url地址
  149. print(response.url)
  150. # 查看响应头部字符编码
  151. print(response.encoding)
  152. # 查看响应码
  153. print(response.status_code)
  154. # Cookies
  155. cookiejar = response.cookies
  156. # 返回CookieJar对象:
  157. print(cookiejar)
  158. # <RequestsCookieJar[<Cookie BAIDUID=6B3B3B9EAA4D5555F362C3946E555555:FG=1 for .baidu.com/>,
  159. # <Cookie BIDUPSID=6B3B3B9EAA4D2718CA521FA514B1E03E for .baidu.com/>,
  160. # <Cookie H_PS_PSSID=88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111 for .baidu.com/>,
  161. # <Cookie PSTM=1122223333 for .baidu.com/>,
  162. # <Cookie BDSVRTM=0 for www.baidu.com/>,
  163. # <Cookie BD_HOME=1 for www.baidu.com/>]>
  164. # 将CookieJar转为字典:
  165. cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
  166. print(cookiedict)
  167. # {'BAIDUID': '6B3B3B9EAA4D5555F362C3946E555555:FG=1',
  168. # 'BIDUPSID': '6B3A3B9ECC4D2718AC521AC222B1F03E',
  169. # 'H_PS_PSSID': '88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111',
  170. # 'PSTM': '1122223333',
  171. # 'BDSVRTM': '0',
  172. # 'BD_HOME': '1'}
  173. return
  174. except:
  175. print("run方法失败")
  176. raise
  177. # 钩子函数
  178. def ResponseHook(res, *args, **kwargs):
  179. print('url', res.url)
  180. # return # 不能返回有意义的数据哦!
  181. if __name__ == "__main__":
  182. REQ(url,method) # 普通请求
  183. # REQ_sess() # session对象