•  requests库的使用

pip快速安装

  1. pip install requests

请求方法

每一个请求方法都有一个对应的API,比如GET请求就可以使用get()方法:

  1. import requests
  2. # 发送请求
  3. res = requests.get('https://www.baidu.com/')
  4. # encoding设置编码
  5. res.encoding ='utf-8'
  6. # text 接收返回内容
  7. print(res.text)

而POST请求就可以使用post()方法,并且将需要提交的数据传递给data参数即可:

  1. import requests
  2. # 发送请求
  3. res = requests.post('http://www.httpbin.org/post',data={'username':'q123','password':123})
  4. # encoding设置编码
  5. res.encoding ='utf-8'
  6. # text 接收返回内容
  7. print(res.text)

传递URL参数

传递URL参数也不用再像urllib中那样需要去拼接URL,而是简单的,构造一个字典,并在请求时将其传递给params参数:

  1. import requests
  2. # 设置参数
  3. params = {'kay1':32324242, 'kay2':'fwewefewf232'}
  4. # url拼接
  5. res = requests.get(url='http://httpbin.org/get',params=params)
  6. # 打印url
  7. print(res.url)

自定义Headers

如果想自定义请求的Headers,同样的将字典数据传递给headers参数

  1. import requests
  2. headers = {
  3. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'}
  4.  
  5. res = requests.get(url='https://www.baidu.com/', headers=headers)
  6. print(res.headers)

自定义Cookies

Requests中自定义Cookies也不用再去构造CookieJar对象,直接将字典递给cookies参数。

  1. import requests
  2. cookies = {'cookies_are':'working'}
  3. res = requests.get(url='http://httpbin.org/cookies', cookies=cookies)
  4. print(res.text)

设置代理(proxite)

当我们需要使用代理时,同样构造代理字典,传递给proxies参数。

  1. import requests
  2. proxite = {
  3. 'http':'http://172.0.0.1:3128',
  4. 'https':'http://172.0.0.1:3128'
  5. }
  6. requests.get('https://www.baidu.com/',proxite=proxite)

重定向(allow_redirects)

在网络请求中,我们常常会遇到状态码是3开头的重定向问题,在Requests中是默认开启允许重定向的,即遇到重定向时,会自动继续访问。

  1. import requests
  2. # 重定向(False=关闭重定向,True=开户重定向)
  3. requests.get('https://www.baidu.com/', allow_redirects=False)

禁止证书验证(verify)

有时候我们使用了抓包工具,这个时候由于抓包工具提供的证书并不是由受信任的数字证书颁发机构颁发的,所以证书的验证会失败,所以我们就需要关闭证书验证。 在请求的时候把verify参数设置为False就可以关闭证书验证了。

  1. import requests
  2. # 证书验证(False=关闭验证,True=开户验证)
  3. requests.get('https://www.baidu.com/', verify=False)

设置超时(timeout)

设置访问超时,设置timeout参数即可。

  1. import requests
  2. # 设置超时
  3. requests.get('https://www.baidu.com/', timeout=0.1)
  • 接收响应

响应内容(text)

通过Requests发起请求获取到的,是一个requests.models.Response对象。通过这个对象我们可以很方便的获取响应的内容。

之前通过urllib获取的响应,读取的内容都是bytes的二进制格式,需要我们自己去将结果decode()一次转换成字符串数据。

而Requests通过text属性,就可以获得字符串格式的响应内容。

  1. import requests
  2. # 接收响应内容
  3. res = requests.get('https://www.baidu.com/')
  4. print(res.text)

字符编码(encoding)

Requests会自动的根据响应的报头来猜测网页的编码是什么,然后根据猜测的编码来解码网页内容,基本上大部分的网页都能够正确的被解码。而如果发现text解码不正确的时候,就需要我们自己手动的去指定解码的编码格式。

  1. import requests
  2. # 字符编码
  3. res = requests.get('https://www.baidu.com/')
  4. res.encoding = 'utf-8'
  5. print(res.text)

二进制数据(content)

而如果你需要获得原始的二进制数据,那么使用content属性即可。

  1. import requests
  2. # 二进制数据
  3. res = requests.get('https://www.baidu.com/')
  4. print(res.content)

json数据(json)

如果我们访问之后获得的数据是JSON格式的,那么我们可以使用json()方法,直接获取转换成字典格式的数据。

  1. import requests
  2.  
  3. res = requests.get('https://api.github.com/events')
  4. # 转换为json数据
  5. res.json()
  6. print(res.text)

状态码(status_code)

通过status_code属性获取响应的状态码

  1. import requests
  2. res = requests.get('https://api.github.com/events')
  3. print(res.status_code)

响应报头(headers)

通过headers属性获取响应的报头

  1. import requests
  2. res = requests.get('https://api.github.com/events')
  3. print(res.headers)

服务器返回的cookies(cookies)

通过cookies属性获取服务器返回的cookies

  1. import requests
  2. res = requests.get('https://api.github.com/events')
  3. print(res.cookies)

url

还可以使用url属性查看访问的url。

  1. import requests
  2. res = requests.get('https://api.github.com/events')
  3. print(res.url)
  • Session对象

在Requests中,实现了Session(会话)功能,当我们使用Session时,能够像浏览器一样,在没有关闭关闭浏览器时,能够保持住访问的状态。 这个功能常常被我们用于登陆之后的数据获取,使我们不用再一次又一次的传递cookies。

首先我们需要去生成一个Session对象,然后用这个Session对象来发起访问,发起访问的方法与正常的请求是一摸一样的。 同时,需要注意的是,如果是我们在get()方法中传入headers和cookies等数据,那么这些数据只在当前这一次请求中有效。如果你想要让一个headers在Session的整个生命周期内都有效的话,需要用以下的方式来进行设置:

  1. import requests
  2. # 发送请求
  3. res = requests.get('https://api.github.com/events')
  4. # 创建session实例
  5. session = requests.Session()
  6. # 用session发送请求
  7. resp = session.get('https://api.github.com/events')
  8. print(resp.text)
  • 爬虫例子

爬取铃声:

  1. import requests
  2. from lxml import etree
  3. # 用户输入要爬取的页码
  4. load =input('请输入您需要下载的页码:')
  5. # 发送请求并以二进制读取数据
  6. mp3_url =requests.get('http://ring.itools.cn/index.php?m=applist&gid=zuire&page=%s'%load).content.decode()
  7. # 解析下载的数据(转换为html)
  8. html = etree.HTML(mp3_url)
  9. # 用xpath获得铃声的链接
  10. html_data = mp3_url.xpath('//div/a/@lurl')
  11. # 循环取列表中的链接
  12. for url in html_data:
  13. # 发送铃声的链接以二是制获取铃声的内容
  14. url_go = requests.get(url).content
  15. # 分割链接,用以命名
  16. name = url.split('/')[-1]
  17. # 打开文件
  18. with open('mp3/%s'%name,'wb') as f:
  19. f.write(url_go)
  20. print('下载完成:',name)
  21.  
  22. print('已经全部下载完成')

豆瓣登录案例:

  1. import requests
  2. # 登录页面
  3. img_url='https://accounts.douban.com/j/mobile/login/basic'
  4. # 添加请求头
  5. headers ={
  6. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
  7. }
  8. # 发送登录信息,登录信息在浏览器F12中查找或在抓包工具中获得
  9. data ={
  10. 'ck': '5oo_',
  11. 'name': '1598959****',
  12. 'password': 'q12322333',
  13. 'remember': 'false'
  14. }
  15. # 发送登录信息到服务器
  16. imges=requests.post(img_url,data=data,verify=False,headers=headers)
  17. # 接收服务器返回的cookies
  18. cookies =imges.cookies
  19. # 发送请求
  20. idex =requests.get('https://www.douban.com/',headers=headers,cookies=cookies)
  21. print(idex.text)

糗事百科信息提取案例:

  1. import re
  2. import requests
  3. # 用户输入采集页面
  4. page = input('输入收集的页面:')
  5. # 设置请求头
  6. headers = {
  7. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
  8. 'Referer': 'https://www.qiushibaike.com/hot/page/1/'
  9. }
  10. # 发送请求并读取返回的内容
  11. res =requests.get('https://www.qiushibaike.com/hot/page/%s/'%page,headers=headers,verify=False).text
  12. # 用re模块提取想要的信息
  13. user = re.findall(r"id='qiushi_tag_1(.*?)'>",res,re.S)
  14. # 拼接链接
  15. url =['https://www.qiushibaike.com/article/'+url for url in user]
  16. for i in url:
  17. # 发送请求
  18. user_url =requests.get(i,headers=headers).text
  19. # 用re模块提取想要的信息
  20. name= re.findall(r'<h1 class="article-title">\n(.*?)的糗事:',user_url,re.S)[0]
  21. tim = re.findall(r'<span class="stats-time">\n(.*?)\n</span>',user_url,re.S)[0]
  22. content =re.findall(r'<div class="content">(.*?)</div>',user_url,re.S)[0]
  23. print('用户:',name.strip())
  24. print('发布时间:',tim)
  25. print(content,'\n')
  26. 3

requests库的使用的更多相关文章

  1. Python爬虫小白入门(二)requests库

    一.前言 为什么要先说Requests库呢,因为这是个功能很强大的网络请求库,可以实现跟浏览器一样发送各种HTTP请求来获取网站的数据.网络上的模块.库.包指的都是同一种东西,所以后文中可能会在不同地 ...

  2. Requests库上传文件时UnicodeDecodeError: 'ascii' codec can't decode byte错误解析

    在使用Request上传文件的时候碰到如下错误提示: 2013-12-20 20:51:09,235 __main__ ERROR 'ascii' codec can't decode byte 0x ...

  3. Requests库的几种请求 - 通过API操作Github

    本文内容来源:https://www.dataquest.io/mission/117/working-with-apis 本文的数据来源:https://en.wikipedia.org/wiki/ ...

  4. python脚本实例002- 利用requests库实现应用登录

    #! /usr/bin/python # coding:utf-8 #导入requests库 import requests #获取会话 s = requests.session() #创建登录数据 ...

  5. 大概看了一天python request源码。写下python requests库发送 get,post请求大概过程。

    python requests库发送请求时,比如get请求,大概过程. 一.发起get请求过程:调用requests.get(url,**kwargs)-->request('get', url ...

  6. python WEB接口自动化测试之requests库详解

    由于web接口自动化测试需要用到python的第三方库--requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试. 所以笔者今 ...

  7. python爬虫从入门到放弃(四)之 Requests库的基本使用

    什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用,你会发现,其 ...

  8. (转)Python爬虫利器一之Requests库的用法

    官方文档 以下内容大多来自于官方文档,本文进行了一些修改和总结.要了解更多可以参考 官方文档 安装 利用 pip 安装 $ pip install requests 或者利用 easy_install ...

  9. python requests库学习笔记(上)

    尊重博客园原创精神,请勿转载! requests库官方使用手册地址:http://www.python-requests.org/en/master/:中文使用手册地址:http://cn.pytho ...

  10. 使用Python的requests库进行接口测试——session对象的妙用

    from:http://blog.csdn.net/liuchunming033/article/details/48131051 在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有 ...

随机推荐

  1. list count++

    AtomicInteger count = customTypeCounter.get(order.getCustomerType()); if (count == null) { count = n ...

  2. Spring.net init-method destroy-method

    <object id="exampleInitObject" type="Examples.ExampleObject" init-method=&quo ...

  3. 使用Selenium&PhantomJS的方式爬取代理

    前面已经爬取了代理,今天我们使用Selenium&PhantomJS的方式爬取快代理 :快代理 - 高速http代理ip每天更新. 首先分析一下快代理,如下 使用谷歌浏览器,检查,发现每个代理 ...

  4. Kubernetes (1.6) 中的存储类及其动态供给

    原文地址:http://blog.fleeto.us/translation/dynamic-provisioning-and-storage-classes-kubernetes-0?utm_sou ...

  5. 自己上传的ICON

    http://images0.cnblogs.com/blog2015/753930/201508/281150305315355.png http://images0.cnblogs.com/blo ...

  6. SpringMVC源码解读 - RequestMapping注解实现解读 - RequestMappingInfo

    使用@RequestMapping注解时,配置的信息最后都设置到了RequestMappingInfo中. RequestMappingInfo封装了PatternsRequestCondition, ...

  7. iOS开发--使用lipo命令制作模拟器与真机通用静态库

    通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac和iPhone的CPU不同,才造成了这种情况. 为了模拟器与真机之间切换调试的方便,制作通用版本非常有必要. 现在有 ...

  8. post上传文件限制--另一种解决途径

    问题:项目之前的上传功能是没有问题的,但是今天同样的代码上传一个压缩包的时候出现了问题,报的是struts.xml的错,说是找不到返回的映射, 问题截图: 很奇怪的问题,之前都没问题的,仔细对比后发现 ...

  9. Logstash 算术运算操作

    需求:input为json,output为ES,需使用filter提取json中的某个字段,并执行加法.加法.乘法等算法操作 思路:mutate过滤器+ruby过滤器实现 避坑:根据ES及Logsta ...

  10. Nginx根据用户请求的不同参数返回不同的json值

    用户请求url:http://localhost:8000/getconfig?v=1.03.01,根据参数v=1.03.01或者其他的值返回不同的json值.如果用户请求不带该参数,则返回默认的js ...