1. requests库

Posted Mrs.King_UP

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1. requests库相关的知识,希望对你有一定的参考价值。

  1. requests库和python内置的urllib库:一般使用requests库,这是对urllib的再次封装

  2. 发起请求:有get和post两种方式,返回Response对象

  • get和post区别:get用于指定资源的获取,post用于把实体提交到指定的资源,会导致服务器上状态的变化;get请求将请求参数放在url上,数据在网页链接中可见,post请求的内容不可见,安全性更高
  • 使用:
    r=requests.get(url)
    data=‘key1’:’value1’,’key2’:’value2’
    r=requests.post(url,data=data)
  1. Response的属性
  • r.status_code:response对象的状态编码,为200时正常,4XX或5XX为异常,可通过r.raise_for_status()来抛出异常
  • r.encoding:返回页面的编码格式,是根据页面中的header中的charset解析出来的,若header中没有这一字段,默认为ISO-8859-1。r.encoding=r.apparent_encoding来解决乱码问题
  • r.apparent_encoding:从内容对页面的编码格式进行推断
  • r.text:得到str类型的网页文本信息
  • r.content:得到bytes类型的网页文本信息,需要通过r.content.decode()解码,相当于r.text
  1. 定制请求:
  • 一般使用:r=requests.get(url)
  • 定制请求:r=requests.get(url,headers=headers,cookies=cookies,allow_redirects=True,timeout=30)
  • headers和cookies都是字典形式,反爬中会用到
  • headers:服务器对于每一个请求的浏览器都会对其判定身份,是基于headers中的User-Agent值,每一个浏览器访问服务器时的User-Agent都不同,因此,爬虫需要伪装成浏览器,并且在爬取的过程中自动切换,从而防止网站的封杀。(User-Agent:用以识别客户端的操作系统及版本、浏览器及版本等信息,加上此信息可以伪装为浏览器,不加可能会被识别为爬虫)
  • cookies:用户在页面中输入用户名和密码之后,浏览器将用户名和密码发送给服务器,服务器进行验证,验证通过之后将用户信息加密后封装成cookie放在请求头中返回给浏览器;浏览器收到服务器返回的数据后,将cookie保存起来,下次浏览器再次请求服务器时,会将cookie也放在请求头中传给服务器;服务器收到请求后从请求头拿到cookie并解析用户信息,说明用户已经登录。cookie是将用户的信息保存在客户端的。Cookie无论是服务器发给浏览器还是浏览器发给服务器,都是放在请求头中的。
  • 如何获取页面的headers和cookies?
    拿淘宝来说,
    1. 先登录淘宝页面,然后登录淘宝账号
    2. 右键检查,Network,刷新页面(Ctrl+R),Name,copy中选择copy as cURL(bash)
    3. 进入https://curl.trillworks.com/,将刚刚copy的内容复制进去,选择python,该网站会自动解析出headers和cookie。
  • allow_redirects:重定向,网络请求被重新定个方向转到其他位置,一般出现这种情况时是网站调整、网页地址改变等。
  • timeout:在设定的时间内停止等待响应,只在连接中有效。
  1. 其他
    requests.put()#覆盖掉原有的数据
    payload=“key1”:“data1”,“key2”:“data2”,“key3”:“data3”
    r=requests.put(‘http://httpbin.org/put’,data=payload)
  2. 异常获取
    #IP地址归属地自动查询
    import requests
    url = “http://www.ip138.com/iplookup.asp?ip=”
    try:
    r = requests.get(url + ‘202.204.80.112&action=2’)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[-500:])
    except:
    print(“爬取失败”)

以上是关于1. requests库的主要内容,如果未能解决你的问题,请参考以下文章

OKHttp库都用到了哪些设计模式

多个 iOS 库,每个库都有自己的核心数据存储

preflight request预检请求

PV,UV,IP

为什么flask的contex里定义一个变量,但是这个变量每次request都会重置?

添加 request_mem_region 后,我的驱动程序每次第一次访问都会失败,并显示“忙碌”消息