• requests模块


    模块安装

    pip install requests
    

    requests之request请求

    request


    常用于Django项目中

    print(request.path)  #获取request.path当前请求路径
    print(request.method) #获取当前请求方式(get,post...)
    print(request.GET) #获取所有get请求携带过来的数据
    print(request.POST) #获取所有post请求携带过来的数据
    print(request.body) #获取所有post请求携带过来的数据的原始格式
    print(request.META)  #请求头信息,将来用到哪个咱们再说哪个
    print(request.get_full_path())   #获取请求页面的全部路径 #/customers/?page=5
    print(request.is_ajax())   #判断是不是ajax发送的请求,True和False
    

    请求方式

    常用的就是requests.get()和requests.post()
    看源码可知,requests.get及requests.post等方法都还是调用了request方法

    方法 说明
    requests.request() 构造一个请求,支撑以下各个方法的基础方法
    requests.get() 获取HTML页面的主要方法,对应的是HTTP的GET
    requests.post() 向HTML页面提交POST请求的方法,对应的是HTTP的POST
    requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
    requests.put() 向HTML页面提交PUT请求的方法,对应于HTTP的PUT
    requests.patch() 向HTML页面提交局部修改请求,对应于HTTP的PATCH
    requests.delete() 向HTML页面提交删除的请求,对应于HTTP的DELETE

    请求URL

    在数据采集前,确定页面的加载方式(是静态加载还是动态加载),确定需要获取资源的URL

    请求头

    如何向添加HTTP头部,只是简单的传递一个dict给headers参数就可以了

    from fake_useragent import UserAgent
    headers = {"User-Agent": UserAgent().random,"data_name":"LCH"}
    response=requests.get('http://www.baidu.com',headers=headers)
    

    ​ 有些网站对了拒绝通过代码实现的请求,会在接受请求时,对发送请求的载体进行校验,请求头中的‘User-Agent’参数就是请求载体的唯一标识,因此一般需要定制请求头加入载体标识,这也是一种反 反爬策略:UA伪造

    方式一:

    • 唯一指定请求载体身份
    import requests
    headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
    response=requests.get('http://www.baidu.com',headers=headers)
    print(response.encoding)	#百度编码格式为ISO-8859-1
    response.encoding='utf-8'
    print(response.text)
    
    唯一指定请求载体
    

    方式二:

    • 通过fake-useragent随机生成
    import requests
    from fake_useragent import UserAgent     #fake-useragent	随机生成请求载体
    headers={'User-Agent':UserAgent().random}  	#随机获取一个请求载体
    response=requests.get('http://www.baidu.com',headers=headers)
    print(response.encoding)	#百度编码格式为ISO-8859-1
    response.encoding='utf-8'
    print(response.text)
    

    请求参数

    requests.request()

    requests.request(method,url,kwargs)

    • method 请求方式,对应get/put/post等方法

    • url 获取页面的url链接

    • **kwargs 控制访问参数,共13个

      • 参数 作用
        params 字典或字节系列,作为参数增加到url中
        data 字典、字节序列或者文件对象,作为Request对象
        json JSON格式的数据,作为Request的内容
        headers 字典:HTTP定制头
        cookies 字典或CookieJar,Request中的auth;元祖支持HTTP认证功能
        files 字典类型,传输文件
        timeout 设定超时时间,秒为单位
        proxies 字典类型,设定代理访问服务器,可以增加登录认证
        allow_redirects TrueFalse,默认为True,重定向开关
        stream TrueFalse,默认为True,获取内容立即下载开关
        verify TrueFalse,默认为True,认证SSL证书开关
        cert 本地SSL证书
        auth 元祖,支持HTTP认证功能
    import requests
    requests.get('https://api.github.com/events')
    requests.post('http://httpbin.org/post', data = {'key':'value'})
    requests.put('http://httpbin.org/put', data = {'key':'value'})
    requests.delete('http://httpbin.org/delete')
    requests.head('http://httpbin.org/get')
    requests.options('http://httpbin.org/get')
    

    get请求参数

    ​ get请求通过URL的查询字符串(querystring)传递某种数据。如果你是手工构建URL,那么数据会以键值对的形式置于URL中,跟在一个问号的后面。例如, https://movie.douban.com/typerank?type_name=动作&type=5&interval_id=100:90&action=&qq-pf-to=pcqq.c2c(豆瓣动作片评分)。 Requests允许你使用params关键字参数,以一个字符串字典来提供这些参数。

    import requests
    from fake_useragent import UserAgent
    headers={'User-Agent':UserAgent().random}
    START=0
    END=2000		#如果循环爬取,起始位置数据计数会有大量重复,因此设置起始值爬取
    f=open('豆瓣动作片评分.txt','w',encoding='utf-8')
    url=f'https://movie.douban.com/j/chart/top_list'
    params={
        'type':'5',
        'interval_id':'100:90',
        'action':'',
        'start':START,
        'limit':END,
    }
    response = requests.get(url=url, params=params, headers=headers)   get请求参数params
    data=response.json()
    for movie in data:
        f.write(f'{movie["rank"]}	{movie["title"]}	{movie["score"]}
    ')
    f.close()
    

    post请求参数

    ​ 你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式。

    # http://www.kfc.com.cn/kfccda/storelist/index.aspx   #肯德基城市位置查询
    import requests
    from fake_useragent import UserAgent
    headers={'UserAgent':UserAgent().random}  #随机生成UA
    url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    city=input('请输入查询城市>>>')
    data={
        'cname':'',
        'pid':'',
        'keyword':city,
        'pageIndex':'1',
        'pageSize':'100',
    }
    response=requests.post(url,data=data,headers=headers)   #post请求参数data
    for i in response.json()['Table1']:
        print(i['addressDetail'])
    

    timeout参数

    ​ requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应。

    # http://www.kfc.com.cn/kfccda/storelist/index.aspx   #肯德基城市位置查询
    import requests
    from fake_useragent import UserAgent
    headers={'UserAgent':UserAgent().random}  #随机生成UA
    url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    city=input('请输入查询城市>>>')
    data={
        'cname':'',
        'pid':'',
        'keyword':city,
        'pageIndex':'1',
        'pageSize':'100',
    }
    response=requests.post(url,data=data,headers=headers,timeout=0.1)   #post请求参数data
    for i in response.json()['Table1']:
        print(i['addressDetail'])
    

    注意
    timeout 仅对连接过程有效,与响应体的下载无关。 timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)If no timeout is specified explicitly, requests do not time out.

    requests之response响应

    ​ 任何时候进行了类似 requests.get() 的调用,都在做两件主要的事情。其一,你在构建一个 Request 对象, 该对象将被发送到某个服务器请求或查询一些资源。其二,一旦 requests 得到一个从服务器返回的响应就会产生一个 Response 对象。该响应对象包含服务器返回的所有信息,也包含你原来创建的 Request 对象。

    import requests
    response = requests.get('http://www.baidu.com')
    print(response.status_code)  # 打印状态码
    print(response.url)          # 打印请求url
    print(response.headers)      # 打印头信息
    print(response.cookies)      # 打印cookie信息
    #response.encoding='utf-8'/'gbk'#解决编码问题,或者对需要提取的内容进行部分编解码操作(数据解析会讲)
    print(response.text)  #以文本形式打印网页源码---文本内容
    print(response.content) #以字节流形式打印-----图片/音频/视频
    print(response.json()) #以json形式打印----数据接口API
    print(response.encoding) #输出页面内容编码格式(如ISO-8859-1)可以指定编码确保输出不乱码
    

  • 相关阅读:
    hadoop安装前的准备
    记录一次Qt5程序无法运行的解决过程
    C#里的Thread.Join与Control.Invoke死锁情况
    qbxt7月笔记
    zhxのDP讲
    有n*m的方格图
    最长上升子序列相关问题笔记
    qbxt游记(清北澡堂划水记
    DAZの七下道法(持续更新
    模板
  • 原文地址:https://www.cnblogs.com/Nayears/p/12166719.html
Copyright © 2020-2023  润新知