zoukankan      html  css  js  c++  java
  • python-requests

    python-requests

    python-requests

    作用:能够模拟浏览器向服务器发送请求的库

    requests库的主要方法

    方法描述
    requests.request()构造一个请求,支持以下各种方法
    requests.get()获取html的主要方法
    requests.head()获取html头部信息的主要方法
    requests.post()向html网页提交post请求的方法
    requests.put()向html网页提交put请求的方法
    requests.patch()向html提交局部修改的请求
    requests.delete()向html提交删除请求
    requests.Session()session相关

    请求接收的参数

    requests.request(method,url,**kwargs)类能够构造一个请求,支持不同的请求方式。

    给指定url发送请求

    response = requests.get(url='url路径',timeout=5)
    
    import requests
    

    response = requests.request(method='get',url='https://www.baidu.com')
    print(response.status_code) #打印返回的参数

    request类中看看几个参数:

    method:请求方式。

    url:请求URL

    **kwargs:

    params:字典或者字节序列,作为参数增加到url中,使用这个参数可以把一些键值对以k1=v1&
    k2=v2的模式增加到url中,get请求中用的较多。
           data:字典、字节序列或者文件对象,重点作为向服务器提供或提交资源,作为请求的请求体,与params不同放在url上不同。它也可以接受一个字符串对象。
    json:json格式的数据,可以向服务器提交json类型的数据。
    headers:字典,定义请求的请求头,比如可以headers字典定义user agent。
    cookies:字典或者CookieJar。
    auth:元组,用来支持HTTP认证功能。
    files:字典,用来向服务器传输文件。
    timeout:指定超时时间。
    proxies:字典,设置代理服务器。
    allow_redirects:开关,是否允许对URL进行重定向,默认为True。
    stream:开关,是否对获取内容进行立即下载,默认为False,也就是立即下载。这里需要说明的,stream一般应用于流式请求,
    比如说下载大文件,不可能一次请求就把整个文件都下载了,不现实,这种情况下,就要设置stream=True,requests无法将连接释放回连接池,除非下载完了所有数据,或者调用了response.close。
    verify:开关,用于SSL证书认证,默认为True。
    cert:用于设置保存本地SSL证书路径
    

    响应对象支持的属性

    import requests
    response = requests.request(method='get',url='http://www.baidu.com')
    

    当请求被发送后,会有一个response响应。requests同样为这个reponse赋予了相关方法:

    response:响应对象。
    response.status_code:请求返回状态码。
    response.text:字符串形式的响应内容。
    response.json():返回响应的是json类型的数据,如果响应的类型不是json,则抛出ValueError。
    response.content:二进制的响应内容。
    response.iter_content(chunk_size):生成器,在stream=True的情况下,当遍历生成器时,以块的形式返回,也就是一块一块的遍历要下载的内容。
    避免了遇到大文件一次性的将内容读取到内存中的弊端,如果stream=False,全部数据作为一个块返回。chunk_size参数指定块大小。
    

    response.iter_lines():生成器,当stream=True时,迭代响应数据,每次一行,也就是一行一行的遍历要下载的内容。同样避免了大文件一次性写入到内存中的问题。
    当然,该方法不安全。至于为啥不安全,咱也不知道,咱也不敢问,主要是官网上没说!经查,如果多次调用该方法,iter_lines不保证重新进入时的安全性,因此可能会导致部分收到的数据丢失。
    response.cookies:响应中的cookie信息。
    response.cookies.get_dict():以字典的形式返回cookies信息。
    response.cookies.items():以列表的形式返回cookies信息。
    response.headers:响应头字典。取其中的指定key,response.headers.get('Content-Type', '哎呀,没取到!')
    response.reqeust:请求类型。
    response.url:请求的URL。
    response.reason:响应HTTP状态的文本原因。
    response.encoding:响应结果的编码方式。
    response.encoding = “gbk”:修该响应编码方式,比如说响应结果的编码是utf-8,通过这么response.encoding = “gbk”指定为gbk。
    response.apparent_encoding:根据响应字节流中去chardet库中匹配,返回编码方式,并不保证100%准确。
    response.history:以列表的形式返回请求记录。列表内的请求以最老到最新排序

    requests.get()

    requests.get(url,params=None,**kwargs)  #发送GET请求。相关参数:
    url,请求的URL.
    params参数:可选url中的额外参数,字典或者字节流格式。
    **kwargs:
    		params:字典或者字节序列,作为参数增加到url中,使用这个参数可以把一些键值对以k1=v1&k2=v2的模式增加到url中,get请求中用的较多。
           data:字典、字节序列或者文件对象,重点作为向服务器提供或提交资源,作为请求的请求体,与params不同放在url上不同。它也可以接受一个字符串对象。
    json:json格式的数据,可以向服务器提交json类型的数据。
    headers:字典,定义请求的请求头,比如可以headers字典定义user agent。
    cookies:字典或者CookieJar。
    auth:元组,用来支持HTTP认证功能。
    files:字典,用来向服务器传输文件。
    timeout:指定超时时间。
    proxies:字典,设置代理服务器。
    allow_redirects:开关,是否允许对URL进行重定向,默认为True。
    stream:开关,是否对获取内容进行立即下载,默认为False,也就是立即下载。这里需要说明的,
    stream一般应用于流式请求,比如说下载大文件,不可能一次请求就把整个文件都下载了,不现实,
    这种情况下,就要设置stream=True,requests无法将连接释放回连接池,除非下载完了所有数据,或者调用了response.close。
    verify:开关,用于SSL证书认证,默认为True。
    cert:用于设置保存本地SSL证书路径
    

    params参数

    get难免会带一些额外的参数K1=V1&K2=V2

    手动拼接:

    import requests
    

    response = requests.get(url='http://www.httpbin.org/get?k1=v1&k2=v2')
    print(reponse.url) #http://www.httpbin.org/get?k1=v1&k2=v2
    print(response.json().get('args'))

    现在我们可以使用params参数来解决这个问题

    import requests
    params = {"user":"张开","pwd":"666"}
    response = requests.get(url='httpbin.org/get',params=params)
    print(response.url)   #http://www.httpbin.org/get?user=%E5%BC%A0%E5%BC%80&pwd=666
    print(response.json().get('args'))   #{'pwd':'666','user':'张开'}
    

    headers

    使用headers的目的是模拟人请求网页数据

    最起码在请求头中加入user-agent

    再来看看,GET请求中如何携带headers(请求头)

    import requests
    headers = {'user-agent':"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"}
    

    扒网页过程中如果,存在网页乱码情况

    response.encoding = 'gbk'  #响应的数据用这种方式做转码操作
    print(reponse.encoding)
    print(response.text)
    

    遇到大型文件

    import requests
    response = requests.get(url="https://up.ruyile.com/jy_img/bj/image/5/242/159qt158301921542923.png",timeout=5)
    

    with open('a.ang','wb') as f:
    for i in requests.iter_content(chunk_size=1):
    f.wirte(i)

  • 相关阅读:
    python之read()方法
    python之高阶函数
    python之lambda表达式的应用
    DevExpress.XtraGrid.view.gridview 说明文
    C# SQL时间格式
    GridControl自动定位至符合条件的行
    用sql命令修改数据表
    用C#编程从数据库中读取图片数据导进Excel文件的方法(如何从数据库中读取保存的文件,直接打开,中间不保存到本地)
    DevExpress中GridControl的属性设置及动态绑定数据和全选取消全选
    C# 导出数据到Excel模板中
  • 原文地址:https://www.cnblogs.com/g15009428458/p/12093601.html
Copyright © 2011-2022 走看看