前言

之前我们用了 urllib 库,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助。入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取。那么这一节来简单介绍一下 requests 库的基本用法。

安装

利用 pip 安装

  1. $ pip install requests

或者利用 easy_install

  1. $ easy_install requests

通过以上两种方法均可以完成安装。

引入

首先我们引入一个小例子来感受一下

  1. import requests
  2.  
  3. r = requests.get('http://cuiqingcai.com')
  4. print type(r)
  5. print r.status_code
  6. print r.encoding
  7. #print r.text
  8. print r.cookies
  9.  

以上代码我们请求了本站点的网址,然后打印出了返回结果的类型,状态码,编码方式,Cookies等内容。

运行结果如下

  1. <class 'requests.models.Response'>
  2.  
  3. UTF-
  4. <RequestsCookieJar[]>
  5.  

怎样,是不是很方便。别急,更方便的在后面呢。

基本请求

requests库提供了http所有的基本请求方式。例如

  1.  
  2. r = requests.post("http://httpbin.org/post")
  3. r = requests.put("http://httpbin.org/put")
  4. r = requests.delete("http://httpbin.org/delete")
  5. r = requests.head("http://httpbin.org/get")
  6. r = requests.options("http://httpbin.org/get")
  7.  

嗯,一句话搞定。

基本GET请求

最基本的GET请求可以直接用get方法

  1. r = requests.get("http://httpbin.org/get")

如果想请求JSON文件,可以利用 json() 方法解析

例如自己写一个JSON文件命名为a.json,内容如下

  1.  
  2. ["foo", "bar", {
  3. "foo": "bar"
  4. }]
  5.  

利用如下程序请求并解析

  1.  
  2. import requests
  3.  
  4. r = requests.get("a.json")
  5. print r.text
  6. print r.json()
  7.  

运行结果如下,其中一个是直接输出内容,另外一个方法是利用 json() 方法解析,感受下它们的不同

  1. ["foo", "bar", {
  2. "foo": "bar"
  3. }]
  4. [u'foo', u'bar', {u'foo': u'bar'}]

如果想获取来自服务器的原始套接字响应,可以取得 r.raw 。 不过需要在初始请求中设置 stream=True 。

  1. r = requests.get('https://github.com/timeline.json', stream=True)
  2. r.raw
  3. <requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
  4. r.raw.read()
  5. '\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'

这样就获取了网页原始套接字内容。

如果想添加 headers,可以传 headers 参数

  1. import requests
  2.  
  3. payload = {'key1': 'value1', 'key2': 'value2'}
  4. headers = {'content-type': 'application/json'}
  5. r = requests.get("http://httpbin.org/get", params=payload, headers=headers)
  6. print r.url

通过headers参数可以增加请求头中的headers信息

基本POST请求

对于 POST 请求来说,我们一般需要为它增加一些参数。那么最基本的传参方法可以利用 data 这个参数。

  1. import requests
  2.  
  3. payload = {'key1': 'value1', 'key2': 'value2'}
  4. r = requests.post("http://httpbin.org/post", data=payload)
  5. print r.text

运行结果

  1.  
  2. {
  3. "args": {},
  4. "data": "",
  5. "files": {},
  6. "form": {
  7. "key1": "value1",
  8. "key2": "value2"
  9. },
  10. "headers": {
  11. "Accept": "*/*",
  12. "Accept-Encoding": "gzip, deflate",
  13. ",
  14. "Content-Type": "application/x-www-form-urlencoded",
  15. "Host": "httpbin.org",
  16. "User-Agent": "python-requests/2.9.1"
  17. },
  18. "json": null,
  19. "url": "http://httpbin.org/post"
  20. }
  21.  
  22.  

可以看到参数传成功了,然后服务器返回了我们传的数据。

有时候我们需要传送的信息不是表单形式的,需要我们传JSON格式的数据过去,所以我们可以用 json.dumps() 方法把表单数据序列化。

  1.  
  2. import json
  3. import requests
  4.  
  5. url = 'http://httpbin.org/post'
  6. payload = {'some': 'data'}
  7. r = requests.post(url, data=json.dumps(payload))
  8. print r.text
  9.  

运行结果

  1.  
  2. {
  3. "args": {},
  4. "data": "{\"some\": \"data\"}",
  5. "files": {},
  6. "form": {},
  7. "headers": {
  8. "Accept": "*/*",
  9. "Accept-Encoding": "gzip, deflate",
  10. ",
  11. "Host": "httpbin.org",
  12. "User-Agent": "python-requests/2.9.1"
  13. },
  14. "json": {
  15. "some": "data"
  16. },
  17. "url": "http://httpbin.org/post"
  18. }
  19.  

通过上述方法,我们可以POST JSON格式的数据

如果想要上传文件,那么直接用 file 参数即可

新建一个 a.txt 的文件,内容写上 Hello World!

  1.  
  2. import requests
  3.  
  4. url = 'http://httpbin.org/post'
  5. files = {'file': open('test.txt', 'rb')}
  6. r = requests.post(url, files=files)
  7. print r.text
  8.  

可以看到运行结果如下

  1.  
  2. {
  3. "args": {},
  4. "data": "",
  5. "files": {
  6. "file": "Hello World!"
  7. },
  8. "form": {},
  9. "headers": {
  10. "Accept": "*/*",
  11. "Accept-Encoding": "gzip, deflate",
  12. ",
  13. "Content-Type": "multipart/form-data; boundary=7d8eb5ff99a04c11bb3e862ce78d7000",
  14. "Host": "httpbin.org",
  15. "User-Agent": "python-requests/2.9.1"
  16. },
  17. "json": null,
  18. "url": "http://httpbin.org/post"
  19. }
  20.  

这样我们便成功完成了一个文件的上传。

requests 是支持流式上传的,这允许你发送大的数据流或文件而无需先把它们读入内存。要使用流式上传,仅需为你的请求体提供一个类文件对象即可

  1.  
  2. with open('massive-body') as f:
  3. requests.post('http://some.url/streamed', data=f)
  4.  

这是一个非常实用方便的功能。

芝麻HTTP: Python爬虫利器之Requests库的用法的更多相关文章

  1. PYTHON 爬虫笔记三:Requests库的基本使用

    知识点一:Requests的详解及其基本使用方法 什么是requests库 Requests库是用Python编写的,基于urllib,采用Apache2 Licensed开源协议的HTTP库,相比u ...

  2. python爬虫之一:requests库

    目录 安装requtests requests库的连接异常 HTTP协议 HTTP协议对资源的操作 requests库的7个主要方法 request方法 get方法 网络爬虫引发的问题 robots协 ...

  3. Python爬虫的开始——requests库建立请求

    接下来我将会用一段时间来更新python爬虫 网络爬虫大体可以分为三个步骤. 首先建立请求,爬取所需元素: 其次解析爬取信息,剔除无效数据: 最后将爬取信息进行保存: 今天就先来讲讲第一步,请求库re ...

  4. python爬虫#网络请求requests库

    中文文档 http://docs.python-requests.org/zh_CN/latest/user/quickstart.html requests库 虽然Python的标准库中 urlli ...

  5. 【python爬虫】用requests库模拟登陆人人网

    说明:以前是selenium登陆取cookie的方法比较复杂,改用这个 """ 用requests库模拟登陆人人网 """ import r ...

  6. 芝麻HTTP:Python爬虫利器之Xpath语法与lxml库的用法

    安装 ​pip install lxml 利用 pip 安装即可 XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPat ...

  7. 芝麻HTTP: Python爬虫利器之PyQuery的用法

    前言 你是否觉得 XPath 的用法多少有点晦涩难记呢? 你是否觉得 BeautifulSoup 的语法多少有些悭吝难懂呢? 你是否甚至还在苦苦研究正则表达式却因为少些了一个点而抓狂呢? 你是否已经有 ...

  8. Python爬虫利器之Beautiful Soup,Requests,正则的用法(转)

    https://cuiqingcai.com/1319.html https://cuiqingcai.com/2556.html https://cuiqingcai.com/977.html

  9. PYTHON 爬虫笔记七:Selenium库基础用法

    知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium ...

随机推荐

  1. 洛谷 [P2146] 软件包管理器

    树剖 将一个软件是否安装,看作是sum数组的0或1,对于每个操作前后sum[1]的变化,就是所求 #include <iostream> #include <cstdio> # ...

  2. BZOJ 1758: [Wc2010]重建计划 [暂时放弃]

    今天晚上思维比较乱,以后再写写吧#include <iostream> #include <cstdio> #include <cstring> #include ...

  3. SDN第四次上机作业

    1.建立以下拓扑,并连接上ODL控制器. 2.利用ODL下发流表,使得h3在10s内ping不通h1,10s后恢复. 3.借助Postman通过ODL的北向接口下发流表,再利用ODL北向接口查看已下发 ...

  4. Python tutorial阅读之使用 Python 解释器

    配置环境变量后,一般可以直接通过Python或指定Python版本号来调用Python. Python 解释器有些操作类似 Unix shell:当使用终端设备(tty)作为标准输入调用时,它交互的解 ...

  5. Windows Server 2016-查询FSMO角色信息的三种方法

    FSMO操作主机角色有五种:林范围操作主机角色有两种,分别是 架构主机角色(Schema Master)和 域命名主机角色(Domain Naming Master):及域范围操作主机角色三种,分别是 ...

  6. 【Oracle】-初识PL/SQL

    在最近的工作中要用到存储过程和函数,索性把PL/SQL整体的看一下.之前看过基本书和园子里的博文,在这里将所学简单总结. 一.基本语句 1.大小写 2.分隔符  --  : 3.引用字符串  --   ...

  7. github上fork了别人的项目后,再同步更新别人的提交

    我从github网站和用Git命令两种方式说一下. github网站上操作 打开自己的仓库,进入code下面. 点击new pull request创建.  选择base fork 选择head fo ...

  8. 脚本实现centos7修改二块网卡名称并配置ip信息

    #!/bin/bash interface1=`ls /sys/class/net|grep en|awk 'NR==1{print}'`interface2=`ls /sys/class/net|g ...

  9. centos7 网桥的配置

    centos7下配置网桥,两个步骤:1.新建网桥配置2.修改网卡配置 新建br0 网桥配置 在/etc/sysconfig/network-scripts/目录下新建ifcfg-br0,添加如下配置信 ...

  10. navcat无法远程连接mysql数据库解决办法

    navcat无法远程连接mysql数据库,一般都是因为本地ip没有访问权限,服务器上执行下面指令即可解决 mysql -u root -p GRANT ALL PRIVILEGES ON *.* TO ...