芝麻HTTP: Python爬虫利器之Requests库的用法
前言
之前我们用了 urllib 库,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助。入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取。那么这一节来简单介绍一下 requests 库的基本用法。
安装
利用 pip 安装
- $ pip install requests
或者利用 easy_install
- $ easy_install requests
通过以上两种方法均可以完成安装。
引入
首先我们引入一个小例子来感受一下
-
- import requests
- r = requests.get('http://cuiqingcai.com')
- print type(r)
- print r.status_code
- print r.encoding
- #print r.text
- print r.cookies
-
以上代码我们请求了本站点的网址,然后打印出了返回结果的类型,状态码,编码方式,Cookies等内容。
运行结果如下
-
- <class 'requests.models.Response'>
- UTF-
- <RequestsCookieJar[]>
-
怎样,是不是很方便。别急,更方便的在后面呢。
基本请求
requests库提供了http所有的基本请求方式。例如
-
- r = requests.post("http://httpbin.org/post")
- r = requests.put("http://httpbin.org/put")
- r = requests.delete("http://httpbin.org/delete")
- r = requests.head("http://httpbin.org/get")
- r = requests.options("http://httpbin.org/get")
-
嗯,一句话搞定。
基本GET请求
最基本的GET请求可以直接用get方法
- r = requests.get("http://httpbin.org/get")
如果想请求JSON文件,可以利用 json() 方法解析
例如自己写一个JSON文件命名为a.json,内容如下
-
- ["foo", "bar", {
- "foo": "bar"
- }]
-
利用如下程序请求并解析
-
- import requests
- r = requests.get("a.json")
- print r.text
- print r.json()
-
运行结果如下,其中一个是直接输出内容,另外一个方法是利用 json() 方法解析,感受下它们的不同
- ["foo", "bar", {
- "foo": "bar"
- }]
- [u'foo', u'bar', {u'foo': u'bar'}]
如果想获取来自服务器的原始套接字响应,可以取得 r.raw 。 不过需要在初始请求中设置 stream=True 。
- r = requests.get('https://github.com/timeline.json', stream=True)
- r.raw
- <requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
- r.raw.read()
- '\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
这样就获取了网页原始套接字内容。
如果想添加 headers,可以传 headers 参数
- import requests
- payload = {'key1': 'value1', 'key2': 'value2'}
- headers = {'content-type': 'application/json'}
- r = requests.get("http://httpbin.org/get", params=payload, headers=headers)
- print r.url
通过headers参数可以增加请求头中的headers信息
基本POST请求
对于 POST 请求来说,我们一般需要为它增加一些参数。那么最基本的传参方法可以利用 data 这个参数。
- import requests
- payload = {'key1': 'value1', 'key2': 'value2'}
- r = requests.post("http://httpbin.org/post", data=payload)
- print r.text
运行结果
-
-
- {
- "args": {},
- "data": "",
- "files": {},
- "form": {
- "key1": "value1",
- "key2": "value2"
- },
- "headers": {
- "Accept": "*/*",
- "Accept-Encoding": "gzip, deflate",
- ",
- "Content-Type": "application/x-www-form-urlencoded",
- "Host": "httpbin.org",
- "User-Agent": "python-requests/2.9.1"
- },
- "json": null,
- "url": "http://httpbin.org/post"
- }
-
-
可以看到参数传成功了,然后服务器返回了我们传的数据。
有时候我们需要传送的信息不是表单形式的,需要我们传JSON格式的数据过去,所以我们可以用 json.dumps() 方法把表单数据序列化。
-
- import json
- import requests
- url = 'http://httpbin.org/post'
- payload = {'some': 'data'}
- r = requests.post(url, data=json.dumps(payload))
- print r.text
-
运行结果
-
- {
- "args": {},
- "data": "{\"some\": \"data\"}",
- "files": {},
- "form": {},
- "headers": {
- "Accept": "*/*",
- "Accept-Encoding": "gzip, deflate",
- ",
- "Host": "httpbin.org",
- "User-Agent": "python-requests/2.9.1"
- },
- "json": {
- "some": "data"
- },
- "url": "http://httpbin.org/post"
- }
-
通过上述方法,我们可以POST JSON格式的数据
如果想要上传文件,那么直接用 file 参数即可
新建一个 a.txt 的文件,内容写上 Hello World!
-
- import requests
- url = 'http://httpbin.org/post'
- files = {'file': open('test.txt', 'rb')}
- r = requests.post(url, files=files)
- print r.text
-
可以看到运行结果如下
-
- {
- "args": {},
- "data": "",
- "files": {
- "file": "Hello World!"
- },
- "form": {},
- "headers": {
- "Accept": "*/*",
- "Accept-Encoding": "gzip, deflate",
- ",
- "Content-Type": "multipart/form-data; boundary=7d8eb5ff99a04c11bb3e862ce78d7000",
- "Host": "httpbin.org",
- "User-Agent": "python-requests/2.9.1"
- },
- "json": null,
- "url": "http://httpbin.org/post"
- }
-
这样我们便成功完成了一个文件的上传。
requests 是支持流式上传的,这允许你发送大的数据流或文件而无需先把它们读入内存。要使用流式上传,仅需为你的请求体提供一个类文件对象即可
-
- with open('massive-body') as f:
- requests.post('http://some.url/streamed', data=f)
-
这是一个非常实用方便的功能。
芝麻HTTP: Python爬虫利器之Requests库的用法的更多相关文章
- PYTHON 爬虫笔记三:Requests库的基本使用
知识点一:Requests的详解及其基本使用方法 什么是requests库 Requests库是用Python编写的,基于urllib,采用Apache2 Licensed开源协议的HTTP库,相比u ...
- python爬虫之一:requests库
目录 安装requtests requests库的连接异常 HTTP协议 HTTP协议对资源的操作 requests库的7个主要方法 request方法 get方法 网络爬虫引发的问题 robots协 ...
- Python爬虫的开始——requests库建立请求
接下来我将会用一段时间来更新python爬虫 网络爬虫大体可以分为三个步骤. 首先建立请求,爬取所需元素: 其次解析爬取信息,剔除无效数据: 最后将爬取信息进行保存: 今天就先来讲讲第一步,请求库re ...
- python爬虫#网络请求requests库
中文文档 http://docs.python-requests.org/zh_CN/latest/user/quickstart.html requests库 虽然Python的标准库中 urlli ...
- 【python爬虫】用requests库模拟登陆人人网
说明:以前是selenium登陆取cookie的方法比较复杂,改用这个 """ 用requests库模拟登陆人人网 """ import r ...
- 芝麻HTTP:Python爬虫利器之Xpath语法与lxml库的用法
安装 pip install lxml 利用 pip 安装即可 XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPat ...
- 芝麻HTTP: Python爬虫利器之PyQuery的用法
前言 你是否觉得 XPath 的用法多少有点晦涩难记呢? 你是否觉得 BeautifulSoup 的语法多少有些悭吝难懂呢? 你是否甚至还在苦苦研究正则表达式却因为少些了一个点而抓狂呢? 你是否已经有 ...
- Python爬虫利器之Beautiful Soup,Requests,正则的用法(转)
https://cuiqingcai.com/1319.html https://cuiqingcai.com/2556.html https://cuiqingcai.com/977.html
- PYTHON 爬虫笔记七:Selenium库基础用法
知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium ...
随机推荐
- 洛谷 [P2146] 软件包管理器
树剖 将一个软件是否安装,看作是sum数组的0或1,对于每个操作前后sum[1]的变化,就是所求 #include <iostream> #include <cstdio> # ...
- BZOJ 1758: [Wc2010]重建计划 [暂时放弃]
今天晚上思维比较乱,以后再写写吧#include <iostream> #include <cstdio> #include <cstring> #include ...
- SDN第四次上机作业
1.建立以下拓扑,并连接上ODL控制器. 2.利用ODL下发流表,使得h3在10s内ping不通h1,10s后恢复. 3.借助Postman通过ODL的北向接口下发流表,再利用ODL北向接口查看已下发 ...
- Python tutorial阅读之使用 Python 解释器
配置环境变量后,一般可以直接通过Python或指定Python版本号来调用Python. Python 解释器有些操作类似 Unix shell:当使用终端设备(tty)作为标准输入调用时,它交互的解 ...
- Windows Server 2016-查询FSMO角色信息的三种方法
FSMO操作主机角色有五种:林范围操作主机角色有两种,分别是 架构主机角色(Schema Master)和 域命名主机角色(Domain Naming Master):及域范围操作主机角色三种,分别是 ...
- 【Oracle】-初识PL/SQL
在最近的工作中要用到存储过程和函数,索性把PL/SQL整体的看一下.之前看过基本书和园子里的博文,在这里将所学简单总结. 一.基本语句 1.大小写 2.分隔符 -- : 3.引用字符串 -- ...
- github上fork了别人的项目后,再同步更新别人的提交
我从github网站和用Git命令两种方式说一下. github网站上操作 打开自己的仓库,进入code下面. 点击new pull request创建. 选择base fork 选择head fo ...
- 脚本实现centos7修改二块网卡名称并配置ip信息
#!/bin/bash interface1=`ls /sys/class/net|grep en|awk 'NR==1{print}'`interface2=`ls /sys/class/net|g ...
- centos7 网桥的配置
centos7下配置网桥,两个步骤:1.新建网桥配置2.修改网卡配置 新建br0 网桥配置 在/etc/sysconfig/network-scripts/目录下新建ifcfg-br0,添加如下配置信 ...
- navcat无法远程连接mysql数据库解决办法
navcat无法远程连接mysql数据库,一般都是因为本地ip没有访问权限,服务器上执行下面指令即可解决 mysql -u root -p GRANT ALL PRIVILEGES ON *.* TO ...