• urllib3使用池管理发送请求和requests常用方法的基本使用+session使用


    使用urllib3的池管理器

       urllib3是在urllib进行更加深入的改进,最大的好处就是在urllib的基础上添加了池管理,以至于我们不需要再去注意我们需要由那个链接去发送请求,而只需要获取到链接发送回来的相应的数据。这样就可以大大减少我们对于链接的管理。

      urllib3的请求发送其实很简单,只是将需要发送请求的链接添加到池中,池管理器就会自动按照流程继续流程进行信息的发送。

      以下面一个例子进行简单的联系。

     1 '''
     2 @Description: 使用urllib3中的链接池发送请求
     3 @Version: 1.0
     4 @Autor: Montoin Yan
     5 @Date: 2020-02-01 17:38:54
     6 @LastEditors  : Montoin Yan
     7 @LastEditTime : 2020-02-04 19:15:02
     8 '''
     9 import urllib3
    10 from urllib import parse
    11 import simplejson
    12 import random
    13 
    14 #设置多个请求头,防止被反扒措施进行拦截
    15 ua_list = [
    16     "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
    17     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
    18     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
    19     "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
    20 ]
    21 #随机pick one
    22 ua = random.choice(ua_list)
    23 
    24 #以https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=10&page_start=0 为例
    25 #将链接进行分割,将Ajax需要传递的参数存储到字典中
    26 url = "https://movie.douban.com/j/search_subjects"
    27 d = {
    28     'type':'movie',
    29     'tag':'热门',
    30     'page_limit':'10', 
    31     'page_start':'0'
    32 } 
    33 
    34 #使用urllib3中的池管理方法进行连接。
    35 with urllib3.PoolManager() as http:
    36     response = http.request('GET','{}?{}'.format(url,parse.urlencode(d)),headers={
    37     'User-agent':ua
    38     })
    39     print(type(response)) #获取方法响应的类型
    40     print(response.status,response.reason) #获取状态码和响应结果
    41     # print(response.headers) #获取头信息
    42     # print(response.data) #获取数据

     requests库的常用的方法

      requests库使用了urllib3的内容,他的API的使用比urllib3更加的友好,同时他也在urllib3 的基础上添加了许多的方法,同时去除了urllib3中的糟粕。requests中提供了method方法,使得我们可以在发送请求的同时可以指定发送请求的类型。

      同时,为了管理请求更加方便,它采用session的方式进行回话的保持,使得我们能够在session和cookie之间来回进行信息的传递。

      下面的两段代码大体实现了requests的常用方法和session发送请求的基本方式。

     1 '''
     2 @Description: 
     3 @Version: 1.0
     4 @Autor: Montoin Yan
     5 @Date: 2020-02-04 19:14:12
     6 @LastEditors  : Montoin Yan
     7 @LastEditTime : 2020-02-04 20:30:20
     8 '''
     9 
    10 import requests
    11 from urllib.parse import urlencode
    12 import random
    13 
    14 #设置多个请求头,防止被反扒措施进行拦截
    15 ua_list = [
    16     "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
    17     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
    18     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
    19     "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
    20 ]
    21 #随机pick one
    22 ua = random.choice(ua_list)
    23 
    24 #以https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=10&page_start=0 为例
    25 #将链接进行分割,将Ajax需要传递的参数存储到字典中
    26 j_url = "https://movie.douban.com/j/search_subjects"
    27 d = {
    28     'type':'movie',
    29     'tag':'最新',
    30     'page_limit':'10', 
    31     'page_start':'0'
    32 } 
    33 url = '{}?{}'.format(j_url,urlencode(d)) #必须进行转码,否则无法获取到数据
    34 response = requests.request('GET',url,headers={
    35     'User-agent':ua
    36 })
    37 
    38 with response:
    39     print(response.status_code) #打印响应的状态码
    40     print(type(response)) #打印响应的response的类型
    41     print(response.url) #打印最终响应的url
    42     print(response.headers) #打印响应的头信息
    43     print(response.request.headers) #打印发送请求的头信息
    44     print(response.text[:200]) #当我们获取到的数据量比较大的时候,为了方便进行验证,可以将获取到的网页数据转换为文本格式并进行切片处理
    45     
  • 相关阅读:
    7月17日
    7月16日学习记录
    7月15日学习记录
    git 学习
    投稿相关
    ubuntu16.04 安装以及要做的事情
    python学习使用
    图像相关
    不识别移动硬盘
    深度学习
  • 原文地址:https://www.cnblogs.com/yandashan666/p/12261093.html
Copyright © 2020-2023  润新知