zoukankan      html  css  js  c++  java
  • requests

    URL参数请求:

    import requests
    
    '''
    URL Parameters 请求方式:URL参数
    例如: 以get 方式请求http://httpbin.org/get?first_name=hello&last_name=word
    
    '''
    # params={"first_name":"hello","last_name":"word"}
    # responds=requests.get("http://httpbin.org/get",params=params)
    # print(responds.text)
    # print(responds.url)

    表单参数请求:

    '''
    表单参数提交,注意只更新的是表单数据
    Content-Type: application/x-www-form-urlencoded
    例如: 以post 方式请求http://httpbin.org/post, 增加的资源为params={"first_name":"hello","last_name":"word"}
    
    '''
    params={"first_name":"hello","last_name":"word"}
    headers={"Content-Tpye":"application/x-www-form-urlencoded"}
    responds=requests.post("http://httpbin.org/post",data=params,headers=headers)
    print(responds.text)
    print(responds.url)
    print(responds.request)

    Json 参数数据请求

    '''
    Json数据提交,更新的是数据data
    Content-Type: application/json
    例如: 以post 方式请求http://httpbin.org/post, 增加的资源为params={"first_name":"hello","last_name":"word"} 
    '''
    #Python学习交流QQ群:778463939
    params={"first_name":"hello","last_name":"word"}
    headers={"Content-Tpye":"application/json"}
    responds=requests.post("http://httpbin.org/post",json=params,headers=headers)
    print(responds.text)
    print(responds.url)
    print(responds.request)

    额外话题--构建URL

    def build_url(URL,endpoint):
        return "/".join([URL,endpoint])
    print(build_url("http://httpbin.org","post"))

     二、requests模块的基础知识

    1,requests支持的请求方式

    requests.get("http://httpbin.org/get")
    requests.post("http://httpbin.org/post")
    requests.put("http://httpbin.org/put")
    requests.delete("http://httpbin.org/delete")
    requests.head("http://httpbin.org/get")
    requests.options("http://httpbin.org/get")我们最常用的就是get和post请求,两者的区别就是get请求没有请求体,而post请求有请求体

    2,get请求

    import requests#这是请求的路径,必须有
    url='https://dig.chouti.com/'  #这是本次访问携带的参数,发送请求时,它会以?name=hh的形式加在路径后面,不是必须要有 
    params={'name':'hh'}    #这是请求的请求体,它是以键值对的形式存在的,也不是必须要有
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}
    #这是访问携带的cookie数据cookies='dshdjdsadhsaghgdasjjdasjdhasdashdjkhskad'res = requests.get(url=url, headers=headers,params=params,cookies=cookies)

    3,post请求

    post请求和get请求是一样的,只是多了一个请求体数据#data和json都是请求体数据,data是字典类型的,json发送的是json字符串
    data={'name':'hh','pwd':'12345'}      
    json={"name":"hh","pwd":"12345"}#请求体是以data形式发的,默认的contentType类型是urlencoded,如果请求体数据是以json形式发的,默认的contentType类型为json
    res1=requests.post(url='http://httpbin.org/post', data={'name':'yuan'})
    res2=requests.post(url='http://httpbin.org/post',json={'age':"22",})对于post请求来说,除了比get请求多一个请求体以外,其他用法一模一样,get请求拥有的参数,post都拥有,比如说params参数,如果在post请求里面加一个params参数,他会和get请求一样,会以?a=1的形式加在请求路径后面

    4,response响应对象

    4.1 常见属性

    import requests
    respone=requests.get('https://sh.lianjia.com/ershoufang/')
    respone.text     #响应文本,本身是字节类型,但会以一种猜测的编码格式帮你解码成字符串
    respone.content  #响应文本,字节类型的文本
    respone.status_code  #响应的状态码
    respone.headers      #响应头数据
    respone.cookies      #响应的cookie
    respone.cookies.get_dict()    #响应的字典形式的cookie
    respone.cookies.items()       #响应的元祖形式的cookie
    respone.url                   
    respone.history               #如果请求过程中发生了重定向,这会帮你记录过程
    respone.encoding              #指定text的是用哪种方式解码

    4.2 编码问题

    刚才上面讲了,res.text会以一种猜测的编码帮你解码,但有时是不正确的编码,所以导致拿到数据编码会有问题,其实我们可以给text指定用哪种编码解码
    import requests
    res=requests.get('http://www.baidu.com')
    coding=res.apparent_encoding      #这才是拿到别人的编码方式
    res.encoding=coding               #把别人的编码方式赋给text的解码方式
    res.text                         #这样解码后的字符串就不会有问题了

    4.3 对于图片、视频等字节类型文件

    首先我们直接用res.content就行了,其次是由于文件太大,我们不应该一下就全写进文件里,而是应该一段一段的写进去,于是我们就可以for循环res.iter_content(),然后再一次一次的写入
    import requests
    response=requests.get('http://bangimg1.dahe.cn/forum/201612/10/200447p36yk96im76vatyk.jpg')
    with open("res.png","wb") as f:
        # f.write(response.content) # 比如下载视频时,如果视频100G,用response.content然后一下子写到文件中是不合理的
        for line in response.iter_content():     
            f.write(line)

    4.4针对接收json数据

    import requests
    import json
    response=requests.get('http://httpbin.org/get')
    #我们是可以用反序列化自己手动处理json数据,其实这样麻烦了
    res1=json.loads(response.text) 
    #别人已经给我们封装好了一个方法res.json()这样就直接帮你完成了反序列化的过程
    res2=response.json() 

    4.5关于重定向

    在requests的一些列请求方式中,除了head方式,其他的都会自动处理重定向,上面的属性讲了,可以通过res.history可以查看发送了那些重定向
    我们还可以通过allow_redirects参数设置不让他重定向
    r = requests.get('http://github.com', allow_redirects=False)

     https://docs.python-requests.org/zh_CN/latest/

    故乡明
  • 相关阅读:
    wordpress通过$wpdb获取一个分类下所有的文章
    WordPress的摘要显示方式
    WordPress简洁的SEO标题、关键词和描述
    WordPress获取特色图像的链接地址
    WordPress的Bootstrap面包屑导航
    destoon 6.0 手机站支持在所有浏览器访问
    dede织梦5.7的安全防护设置
    WordPress主题制作:基础样式文件
    LInux常用到的命令(面试)
    1030 完美数列 (25分) PAT-B
  • 原文地址:https://www.cnblogs.com/luweiweicode/p/14350883.html
Copyright © 2011-2022 走看看