爬虫之Resquests模块的使用(二)
Requests
Requests模块
Requests模块是一个用于网络访问的模块,其实类似的模块有很多,比如urllib,urllib2,httplib,httplib2,他们基本都提供相似的功能。
在上一篇我们已经使用urllib模块
而Requests会比urllib更加方便,可以节约我们大量的工作,它更加强大,所以更建议使用Requests。
各种请求方式
requests里提供各种请求方式
HTTP定义了与服务器进行交互的不同方式, 其中, 最基本的方法有四种: GET, POST, PUT, DELETE; 一个URL对应着一个网络上的资源, 这四种方法就对应着对这个资源的查询, 修改, 增加, 删除四个操作.上面的程序用到的requests.get()来读取指定网页的信息, 而不会对信息就行修改, 相当于是"只读". requests库提供了HTTP所有基本的请求方式, 都是一句话搞定。
requests请求方法
请求示例
r = requests.get(‘https://github.com/timeline.json’) # GET请求
r = requests.post(“http://httpbin.org/post”) # POST请求
r = requests.put(“http://httpbin.org/put”) # PUT请求
r = requests.delete(“http://httpbin.org/delete”) # DELETE请求
r = requests.head(“http://httpbin.org/get”) # HEAD请求
r = requests.options(“http://httpbin.org/get” ) # OPTIONS请求
以上方法均是在此方法的基础上构建
requests.request(method, url, **kwargs)
返回值属性
import requests respone=requests.get('http://www.jianshu.com')
# respone属性
print(respone.text)# 所请求网页的内容
print(respone.content)
print(respone.status_code) #返回状态码
print(respone.headers)# 网页的头
print(respone.cookies)# 网页的cookie内容
print(respone.cookies.get_dict())
print(respone.cookies.items())
print(respone.url) # 实际的网址
print(respone.history)
print(respone.encoding) # 所请求网页的编码方式
GET请求:requests.get(url)
import requests response = requests.get('http://httpbin.org/get') # 返回一个实例,包含了很多的信息
print(response.text) # 所请求网页的内容
带参数的GET请求:requests.get(url, param=None)
通常我们会通过httpbin.org/get?key=val方式传递。Requests模块允许使用params关键字传递参数,以一个字典来传递这些参数。
比如我们想传递key1=value1,key2=value2到http://httpbin.org/get里面
构造的url:http://httpbin.org/get?key1=value1&key2=value2
import requests
data = {
"key1":"key1",
"key2":"key2"
}
response = requests.get("http://httpbin.org/get",params=data)
print(response.url)
运行结果如下
C:\Pycham\venv\Scripts\python.exe C:/Pycham/demoe3.py
http://httpbin.org/get?key1=key1&key2=key2 Process finished with exit code 0
可以看到,参数之间用&隔开,参数名和参数值之间用=隔开。
上述两种的结果是相同的,通过params参数传递一个字典内容,从而直接构造url。
注意:通过传参字典的方式的时候,如果字典中的参数为None则不会添加到url上。
POST请求:requests.post(url, data=data)
requests.post()用法与requests.get()完全一致,特殊的是requests.post()有一个data参数,用来存放请求体数据
注意:同样的在发送post请求的时候也可以和发送get请求一样通过headers参数传递一个字典类型的数据
import requests data = {
"name":"zhaofan",
"age":23
}
response = requests.post("http://httpbin.org/post",data=data)
print(response.text)
运行结果如下:
可以看到参数传成功了,然后服务器返回了我们传的数据。
C:\Pycham\venv\Scripts\python.exe C:/Pycham/demoe3.py
{
"args": {},
"data": "",
"files": {},
"form": {
"age": "23",
"name": "zhaofan"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Content-Length": "19",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.19.1"
},
"json": null,
"origin": "218.200.145.68",
"url": "http://httpbin.org/post"
}
定制请求头和cookie信息
import requests
import json data = {'some': 'data'}
cookie = {'key':'value'}
headers = {'content-type': 'application/json',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
r = requests.post('https://api.github.com/some/endpoint', data=data, headers=headers,cookies =cookie)
print(r.text)
设置请求超时与代理
import requests
import json
data = {'some': 'data'}
proxies = {'http':'ip1','https':'ip2' } r = requests.post('https://api.github.com/some/endpoint', data=data,proxies=proxies,timeout = 1)
print(r.text)
传送json格式数据
有时候我们需要传送的信息不是表单形式的,需要我们传JSON格式的数据过去,所以我们可以用 json.dumps() 方法把表单数据序列化
import json
import requests url = 'http://httpbin.org/post'
data = {'some': 'data'}
r = requests.post(url, data=json.dumps(data))
print r.text
运行结果如下:
C:\Pycham\venv\Scripts\python.exe C:/Pycham/demoe3.py
{
"args": {},
"data": "{\"some\": \"data\"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Content-Length": "16",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.19.1"
},
"json": {
"some": "data"
},
"origin": "218.200.145.68",
"url": "http://httpbin.org/post"
}
上传文件
如果想要上传文件,那么直接用 file 参数即可
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-Length": "156",
"Content-Type": "multipart/form-data; boundary=7d8eb5ff99a04c11bb3e862ce78d7000",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.9.1"
},
"json": null,
"url": "http://httpbin.org/post"
}
解析json
import requests
import json
response=requests.get('http://httpbin.org/get')
res1=json.loads(response.text) #太麻烦
res2=response.json() #直接获取json数据
print(res1 == res2) #True
那r.text和r.content的区别是什么呢?
r.text是unicode编码的响应内容(r.text is the content of the response in unicode)
r.content是字符编码的响应内容(r.content is the content of the response in bytes)
text属性会尝试按照encoding属性自动将响应的内容进行转码后返回,如果encoding为None,requests会按照chardet(这是什么?)猜测正确的编码
如果你想取文本,可以通过r.text, 如果想取图片,文件,则可以通过r.content
针对响应内容是二进制文件(如图片)的场景,content属性获取响应的原始内容(以字节为单位)
爬虫之Resquests模块的使用(二)的更多相关文章
- 第三百二十六节,web爬虫,scrapy模块,解决重复ur——自动递归url
第三百二十六节,web爬虫,scrapy模块,解决重复url——自动递归url 一般抓取过的url不重复抓取,那么就需要记录url,判断当前URL如果在记录里说明已经抓取过了,如果不存在说明没抓取过 ...
- 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签
第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象需 ...
- 第三百二十四节,web爬虫,scrapy模块介绍与使用
第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了 ...
- 第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装
第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装 当前环境python3.5 ,windows10系统 Linux系统安装 在线安装,会自动安装scrapy模块以及相关依赖模块 pip ...
- asynicio模块以及爬虫应用asynicio模块(高性能爬虫)
一.背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是 ...
- 孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块
孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块 (完整学习过程屏幕记录视频地址在文末) 从今天起开始正式学习Python的爬虫. 今天已经初步了解了两个主要的模块: ...
- 八、asynicio模块以及爬虫应用asynicio模块(高性能爬虫)
asynicio模块以及爬虫应用asynicio模块(高性能爬虫) 一.背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行, ...
- Python爬虫练习(requests模块)
Python爬虫练习(requests模块) 关注公众号"轻松学编程"了解更多. 一.使用正则表达式解析页面和提取数据 1.爬取动态数据(js格式) 爬取http://fund.e ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
随机推荐
- Linux下搭建gtk+2.0开发环境
安装gtk2.0 sudo apt-get install libgtk2.0-dev 查看 2.x 版本 pkg-config --modversion gtk+-2.0 #有可能需要sudo ap ...
- ResNet152网络复现(Caffe)
一.准备数据集 1) 下载数据集 Imagnet网站上下载了三类图片,分别是big cat.dog.fish,其中训练集的图片数一共是4149,测试集的图片数是1003,训练集和测试集的图片数比例4 ...
- 2017/05/07 java 基础 随笔
1.^异或 逻辑运算符 两边相同为false 不同为ture 2.键盘录入 package com.huawei; /** * 键盘录入 * @author Eric * */ import j ...
- java 多线程四
java 多线程一 java 多线程二 java 多线程三 java 多线程四 一个生产者,消费者的例子: import java.util.Stack; /** * Created by root ...
- 【转】Python中的运算符
[转]Python中的运算符 说完常用的数据类型,再来说下运算符.运算符用于将各种类型的数据进行运算,让静态的数据跑起来. 编程语言中的运算大致分为以下几个大类: 算术运算, 用于加减乘除等数学运算 ...
- Python 3.x 格式化输出字符串 % & format 笔记
Python 3.x 格式化输出字符串 % & format 笔记 python格式化字符串有%和{}两种 字符串格式控制符. 字符串输入数据格式类型(%格式操作符号) %%百分号标记 %c字 ...
- dubbo系列五、dubbo核心配置
一.配置文件 1.生产者配置provider.xml <?xml version="1.0" encoding="UTF-8"?> <bean ...
- 功率 dbm 和 mw 的换算
射频知识; 功率/电平(dBm):放大器的输出能力,一般单位为w.mw.dBm.dBm是取1mw作基准值,以分贝表示的绝对功率电平. 换算公式:电平(dBm)=10lgw5W → 10lg5000 ...
- tomcat环境多个jdk版本自定义使用JDK版本及路径
windows环境: 多个应用使用tomcat并且有不同版本的jdk,为避免重复可以在启动文件中指定JDK的版本 如新安装的JDK6在C:\Program Files\Java\jdk1.7.0_79 ...
- CentOS 6.5结合busybox完成自制Linux系统及远程登录和nginx安装测试
前言 系统定制在前面的博文中我们就有谈到过了,不过那个裁减制作有简单了点,只是能让系统跑起来而,没有太多的功能,也没的用户登录入口,而这里我们将详细和深入的来谈谈Linux系统的详细定制过程和实 ...