之前,我们学习了基本库urllib的相关用法,但是在网页验证、Cookies处理等方面是比较繁琐的,需要用到Handler并且还需自己构建Opener。requests库的出现很好的解决了这个问题,下面让我们学习一下有关requests的操作。

  requests的安装可以直接使用pip install requests安装

  此处,小编建议重新安装pip,这样可以在任何目录使用pip,而不需要切换到pip所在目录下才可以使用,重装命令如下:

    python -m pip install --upgrade pip --force-reinstall

  接下来,进入正式学习

  一、基本用法

  1.GET请求

  GET请求的API如下:

  1. requests.get(url,params=None,**kwargs)

  参数详解:

  url:请求链接,必填项

  params:请求参数(requests接受的可选参数之一,在GET请求中较为常用)

  **kwargs:requests接受的可选参数,有params、data、json、headers、cookies、files、auth、timeout、allow_redirects、proxies、verify、stream以及cert。文章末尾小编总结了可选参数含义和用法。

  实例应用:

  1. import requests
  2.  
  3. headers = {
  4. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0'}
  5.  
  6. data = {
  7. 'name': 'germey'
  8. 'age': 22}
  9.  
  10. # 读取网页
  11. url = 'http://httpbin.org/get'
  12. r = requests.get(url, params = params,headers = headers)
  13. print(r.text)
  14.  
  15. # 读取图片/音频/视频等本质上是二进制的文件
  16. url = 'https://github.com/favicon.ico'
  17. r = requests.get(url, headers = headers)
  18. print(r.content) #r.content返回bytes类型数据
  19. # 图片保存
  20. with open('f.ico', 'wb') as f:
  21. f.write(r.content)

  

  2.POST请求

  POST请求API如下:

  1. requests.post(url, data=None, json=None, **kwargs)

  参数详解:

  url:必填项,访问地址

  data:提交的表单数据,常用类型为dict或者str

  json:提交表单数据的另一种方式,常用类型为dict或者str

  **kwargs:requests接受的可选参数

  

  小编简单的说一下data参数和json参数的区别:

    1、不管jsonstr还是dict,如果不指定headers中的content-type,默认为application/json

    2、datadict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式

    3、datastr时,如果不指定content-type,默认为application/json

    4、用data参数提交数据时,request.body的内容则为a=1&b=2的这种形式,用json参数提交数据时,request.body的内容则为'{"a": 1, "b": 2}'的这种形式

  常见的form表单可以直接使用data参数进行报文提交,而data的对象则是python中的字典类型;而在最新爬虫的过程中遇到了一种payload报文,是一种json格式的报文,因此传入的报文对象也应该是格式的。

  应用实例:

  1. import requests
  2.  
  3. data = {
  4. 'name': 'germey',
  5. 'age': 22}
  6. headers = {
  7. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0'}
  8.  
  9. r = requests.post(url, headers=headers, data=data)
  10. print(r.text)

  3.响应

  在上面的实例中,通过使用text和content获取了响应内容。此外,还有很多方法和属性可以获得响应的其他信息。

    status_code——响应状态码

    headers——响应头

    cookies——响应Cookies

    url——响应网址

    history——请求历史

  4.requests内置状态码对象requests.codes

  例如,requests.codes.ok得到状态码200

  各状态码对应信息如下:

  1. # Informational.
  2. 100: ('continue',),
  3. 101: ('switching_protocols',),
  4. 102: ('processing',),
  5. 103: ('checkpoint',),
  6. 122: ('uri_too_long', 'request_uri_too_long'),
  7. 200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '✓'),
  8. 201: ('created',),
  9. 202: ('accepted',),
  10. 203: ('non_authoritative_info', 'non_authoritative_information'),
  11. 204: ('no_content',),
  12. 205: ('reset_content', 'reset'),
  13. 206: ('partial_content', 'partial'),
  14. 207: ('multi_status', 'multiple_status', 'multi_stati', 'multiple_stati'),
  15. 208: ('already_reported',),
  16. 226: ('im_used',),
  17.  
  18. # Redirection.
  19. 300: ('multiple_choices',),
  20. 301: ('moved_permanently', 'moved', '\\o-'),
  21. 302: ('found',),
  22. 303: ('see_other', 'other'),
  23. 304: ('not_modified',),
  24. 305: ('use_proxy',),
  25. 306: ('switch_proxy',),
  26. 307: ('temporary_redirect', 'temporary_moved', 'temporary'),
  27. 308: ('permanent_redirect',
  28. 'resume_incomplete', 'resume',), # These 2 to be removed in 3.0
  29.  
  30. # Client Error.
  31. 400: ('bad_request', 'bad'),
  32. 401: ('unauthorized',),
  33. 402: ('payment_required', 'payment'),
  34. 403: ('forbidden',),
  35. 404: ('not_found', '-o-'),
  36. 405: ('method_not_allowed', 'not_allowed'),
  37. 406: ('not_acceptable',),
  38. 407: ('proxy_authentication_required', 'proxy_auth', 'proxy_authentication'),
  39. 408: ('request_timeout', 'timeout'),
  40. 409: ('conflict',),
  41. 410: ('gone',),
  42. 411: ('length_required',),
  43. 412: ('precondition_failed', 'precondition'),
  44. 413: ('request_entity_too_large',),
  45. 414: ('request_uri_too_large',),
  46. 415: ('unsupported_media_type', 'unsupported_media', 'media_type'),
  47. 416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'),
  48. 417: ('expectation_failed',),
  49. 418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'),
  50. 421: ('misdirected_request',),
  51. 422: ('unprocessable_entity', 'unprocessable'),
  52. 423: ('locked',),
  53. 424: ('failed_dependency', 'dependency'),
  54. 425: ('unordered_collection', 'unordered'),
  55. 426: ('upgrade_required', 'upgrade'),
  56. 428: ('precondition_required', 'precondition'),
  57. 429: ('too_many_requests', 'too_many'),
  58. 431: ('header_fields_too_large', 'fields_too_large'),
  59. 444: ('no_response', 'none'),
  60. 449: ('retry_with', 'retry'),
  61. 450: ('blocked_by_windows_parental_controls', 'parental_controls'),
  62. 451: ('unavailable_for_legal_reasons', 'legal_reasons'),
  63. 499: ('client_closed_request',),
  64.  
  65. # Server Error.
  66. 500: ('internal_server_error', 'server_error', '/o\\', '✗'),
  67. 501: ('not_implemented',),
  68. 502: ('bad_gateway',),
  69. 503: ('service_unavailable', 'unavailable'),
  70. 504: ('gateway_timeout',),
  71. 505: ('http_version_not_supported', 'http_version'),
  72. 506: ('variant_also_negotiates',),
  73. 507: ('insufficient_storage',),
  74. 509: ('bandwidth_limit_exceeded', 'bandwidth'),
  75. 510: ('not_extended',),
  76. 511: ('network_authentication_required', 'network_auth', 'network_authentication')

   常见错误代码以及错误原因如下:

  下面小编介绍一下这些可选参数分别是什么及其其用法:

  params:请求参数(在url中显现的),其值可以是字典、列表或者元组

  data:发送信息,主要用于POST请求中发送登录表单信息,其值通常为字典、列表或者元组,也可以是字节或者文件对象

  json:发送的JSON序列化数据,值当然为JSON格式

  headers:请求头,其值为字典数据

  cookies:值为字典或者CookieJar对象

  files:上传到服务器的文件。值为{'name': file-tuple}的字典以及('filename', fileobj)、('filename', fileobj, 'content_type')或('filename', fileobj, 'content_type', custom_headers)的元组数据。fileobj为文本读取数据,值为open(filename,mode)或者其他文本读取方式;content_type定义给定文件内容类型的字符串;custom_header是dict对象,包含要为文件添加的附加头。

  auth:授权元组

  timeout:超时设置,其值可以是数值对象也可以是二维元组对象

  allow_redirects:重定向设置,默认值为True

  proxies:代理设置,其值为{‘协议名’,url}格式的字典

  verify:证书认证,其值为bool型,默认为True

  stream:如果“False”,则立即下载响应内容。默认为True

  cert:添加证书文件,其值可以是String或者tuple。若为string,则为路径字符串;若为tuple,则为证书数据,构成样式为(cert,key)

  小编推一下自己新建的公众号,公众号内容更新快,每天定时更新,内容量适中,便于浏览和记忆

  

python3网络爬虫系统学习:第二讲 基本库requests(一)的更多相关文章

  1. python3网络爬虫系统学习:第一讲 基本库urllib

    在python3中爬虫常用基本库为urllib以及requests 本文主要描述urllib的相关内容 urllib包含四个模块:requests——模拟发送请求 error——异常处理模块 pars ...

  2. 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用

    [网络爬虫入门02]HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院  欧浩源 1.引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求.urllib是 ...

  3. 《Python3 网络爬虫开发实战》学习资料

    <Python3 网络爬虫开发实战> 学习资料 百度网盘:https://pan.baidu.com/s/1PisddjC9e60TXlCFMgVjrQ

  4. 《Python3 网络爬虫开发实战》开发环境配置过程中踩过的坑

    <Python3 网络爬虫开发实战>学习资料:https://www.cnblogs.com/waiwai14/p/11698175.html 如何从墙内下载Android Studio: ...

  5. 转:【Python3网络爬虫开发实战】 requests基本用法

    1. 准备工作 在开始之前,请确保已经正确安装好了requests库.如果没有安装,可以参考1.2.1节安装. 2. 实例引入 urllib库中的urlopen()方法实际上是以GET方式请求网页,而 ...

  6. Python3 网络爬虫(请求库的安装)

    Python3 网络爬虫(请求库的安装) 爬虫可以简单分为几步:抓取页面,分析页面和存储数据 在页面爬取的过程中我们需要模拟浏览器向服务器发送请求,所以需要用到一些python库来实现HTTP的请求操 ...

  7. python学习第二讲,pythonIDE介绍以及配置使用

    目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...

  8. java网络爬虫基础学习(三)

    尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...

  9. 崔庆才Python3网络爬虫开发实战电子版书籍分享

    资料下载地址: 链接:https://pan.baidu.com/s/1WV-_XHZvYIedsC1GJ1hOtw 提取码:4o94 <崔庆才Python3网络爬虫开发实战>高清中文版P ...

随机推荐

  1. 查询组成员(group)

    查询组成员 $groupname = "groupname" $members = (get-adgroup $groupname -properties member).memb ...

  2. QT的键值对应关系 看完开发节省时间 哈哈

    http://blog.csdn.net/wangjieest/article/details/8283656

  3. QA-IDEA中用maven配置项目无法加载JDBC

    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Im building Maven Java Web application and w ...

  4. Starting MySQL.. ERROR! The server quit without updating PID file (/var/mysql/data/feng.pid). 问题解决方案

    1.首先应该想到 授权 chown -R mysql:mysql /var/mysql/data  给mysql 用户 2.vim /etc/my.cnf [mysqld] datadir = /va ...

  5. 小程序——使用Easy Mock

    使用Easy Mock 一.什么是Easy Mock    Easy Mock 是一个可视化的能快速生成模拟数据的持久化服务.在实际开发中常见的Mock方式一般是将模拟数据直接写在代码里,利用Java ...

  6. 【深入理解JAVA虚拟机】第4部分.程序编译与代码优化.1.编译期优化。这章编译和实战部分没理解通,以后再看。

    1.概述 1.1.编译器的分类 前端编译器:Sun的Javac. Eclipse JDT中的增量式编译器(ECJ)[1].  把*.java文件转变成*.class文件 JIT编译器:HotSpot ...

  7. 谁把我的表给drop了?

    今天生产上有人把几张表给DROP了,一通折腾.恢复备份导数回来数据,重建索引. 但是,我就想知道是谁给干掉了. 到你被删除表数据库中找日志吧.其它的也想不到更好办法了 USE '被删表数据库' --查 ...

  8. 2018.09.23模拟总结(T2)

    T1,T3我就不说啦,反正也不会.主要想讲的是T2. T2用了一个神奇的算法:折半搜索. 因为这个坑爹的数据范围告诉我们暴搜或是状压会TLE,而一半刚好能卡过去. 折半搜索其实跟暴搜没什么区别,就是折 ...

  9. Redis数据类型(上)

    数据类型 1.string(字符串) 2.hash(哈希,类似java里的Map) 3.list(列表) 4.set(集合) 5.zset(sorted set:有序集合) 6.基数 String(字 ...

  10. csv文件已经python内置csv模块

    csv(Comma Separated Value,即逗号分隔值),文件以纯文本形式存储表格数据(数字和文本).可以用excel打开,并自动将每个逗号隔开的数据作为一列在excel中显示. pytho ...