Requests:让HTTP服务人类

虽然Python的标准库中urllib2模块中已经包含了平常我们使用的大多数功能,但是它的API使用起来让人感觉不太好,而Requests自称"HTTP for Humans",说明使用更简单方便。

Requests唯一的一个非转基因的Python HTTP库,人类可以安全享用

Requests继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL和POST数据自动编码。

requests的底层实现其实就是urllib3

Requests的文档非常完备,中文文档也相当不错。Requests能完全满足当前网络的需求,支持Python2.6-3.5,而且能在PyPy下完美运行。

开源首地址:https://github.com/kennethreitz/requests

中文文档API: http://docs.python-requests.org/zh_CN/latest/index.html

安装方式

利用pip安装或者利用easy_install都可以完成安装:

$pip install requests

$easy_install requests

基本GET请求(headers参数和parmas参数)

  1. 最基本的GET请求可以直接用get方法
response = requests.get("http://www.baidu.com/")

#也可以这么写
#response = requests.request("get", "http://www.baidu.com/")
  1. 添加headers和查询参数

如果想添加headers,可以传入headers参数来参加请求头中的headers信息,如果要将参数放在url中传递,可以利用params参数。

import requests

kw = {'wd':'长城'}

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

#params接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response = requests.get("http://www.baidu.com/s?", params=kw, headers = headers) #查看响应内容,response.text返回的是Unicode格式的数据
print(response.text) #查看响应内容,response.content返回的字节流数据
print(response.content) #查看完整url地址
print(response.url) #查看响应头部字符编码
print(response.encoding) #查看响应码
print(response.status_code)

运行结果

......

......

'http://www.baidu.com/s?wd=%E9%95%BF%E5%9F%8E'

'utf-8'

200
  • 使用response.text时,Requests会基于HTTP响应的文本编码自动解码响应内容,大多数Unicode字符集都能被无缝地解码。
  • 使用response.content时,返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件。

基本POST请求(data参数)

  1. 最基本的GET请求可以直接用post方法
response = requests.post("http://www.baidu.com/", data=data)
  1. 传入data数据

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

formdata = {
"type":"AUTO",
"i":"i love python",
"doctype":"json",
"xmlVersion":"1.8",
"keyfrom":"fanyi.web",
"ue":"UTF-8",
"action":"FY_BY_ENTER",
"typoResult":"true"
} url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null" headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"} response = requests.post(url, data=formdata, headers=headers) print(response.text) #如果是json文件可以直接显示
print(response.json())

运行结果

{"type":"EN2ZH_CN","errorCode":0,"elapsedTime":2,"translateResult":[[{"src":"i love python","tgt":"我喜欢python"}]],"smartResult":{"type":1,"entries":["","肆文","高德纳"]}}

{u'errorCode': 0, u'elapsedTime': 0, u'translateResult': [[{u'src': u'i love python', u'tgt': u'\u6211\u559c\u6b22python'}]], u'smartResult': {u'type': 1, u'entries': [u'', u'\u8086\u6587', u'\u9ad8\u5fb7\u7eb3']}, u'type': u'EN2ZH_CN'}

代理(proxies参数)

如果需要使用代理,你可以通过为任意请求方法提供proxies参数来配置单个请求:

import requests
#根据协议内容,选择不同的代理
proxies = {
"http":"http://12.34.56.79:9527",
"https":"http://12.34.56.79:9527"
} response = requests.get("http://www.baidu.com", proxies = proxies)
print(response.text)

也可以通过本地环境变量HTTP_PROXYHTTPS_PROXY来配置代理:

export HTTP_PROXY="http://12.34.56.79:9527"
export HTTPS_PROXY="https://12.34.56.79:9527"

私密代理验证(特定格式)和Web客户端验证(auth参数)

urllib2这里的做法比较复杂,requests只需要一步:

私密代理

import requests

#如果带来需要使用HTTP Basic Auth,可以使用下面这种格式:
proxy = {"http":"mr_mao_hacker:sffgr9r@61.158.163.130:16816"} response = requests.get("http://www.baidu.com", proxies=proxy) print(response.text)

web客户端验证

如果是Web客户端验证,需要添加auth=(账户名,密码)

import requests

auth={"test":"123456"}

response = requests.get("http://192.168.199.107", auth=auth)

print(response.text)

urllib2泪奔...

Cookies和Sission

Cookies

如果一个相应中包含了cookie,那么我们可以利用cookies参数拿到:

import requests

response = requests.get("http://www.baidu.com/")

#7.返回cookieJar对象:
cookiejar = response.cookies #8.将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar) print(cookiejar) print(cookiedict)

运行结果:

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

{'BDORZ': '27315'}

**Session

在requests里,session对象是一个非常常用的对象,这个对象代表依次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。

会话能让我们在跨请求时候保持某些参数,比如在同一个Session实例发出的所有请求之间保持cookie

实现人人网登陆

import requests

#1.创建session对象,可以保存Cookie值
ssion = requests.session() #2.处理headers
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} #3.需要登陆的用户名和密码
data={"email":"mr_mao_hacker@163.com", "passwd":"alarmchime"} #4.发送附带用户名和密码的请求,并获取登陆后的Cookie的值,保存在session里
ssion.post("http://www.renren.com/PLogin.do", data=data) #5.ssion包含用户登陆后的cookie值,可以直接访问那些登陆后的页面
response = ssion.get("http://www.renren.com/410043129/profile") #6.打印响应内容
print(response.text)

处理HTTPS请求SSL证书验证

Requests也可以为HTTPS请求验证SSL证书:

  • 要想检查某个主机的SSL证书,你可以使用verify(也可以不写)
import requests
response = requests.get("https://www.baidu.com", verify=true) #也可以省略不写
#response = requests.get("https://www.baidu.com/")
print r.txt

运行结果:

<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge>百度一下,你就知道
  • 如果SSL证书验证不通过,或者不信任服务器的安全证书,则会报出SSLError,据说12306证书是自己做的:

来测试一下:

import requests

response = requests.get("https://www.12306.cn/mormhweb/")

print(response.text)

果然:

SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

如果我们想跳过12306的证书验证,把verify设置为False就可以正常请求了。

r = requests.get("https://www.12306.cn/mormhweb/", verify = False)

Python爬虫(八)_Requests的使用的更多相关文章

  1. python爬虫基础_requests和bs4

    这些都是笔记,还缺少详细整理,后续会更新. 下面这种方式,属于入门阶段,手动成分比较多. 首先安装必要组件: pip3 install requests pip3 install beautifuls ...

  2. 2.Python爬虫入门_requests

    #2019-11-23 #requests的api使用非常简单 import requests import time if __name__=='__main__': # get请求 url_get ...

  3. Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺

    更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...

  4. 孤荷凌寒自学python第八十天开始写Python的第一个爬虫10

    孤荷凌寒自学python第八十天开始写Python的第一个爬虫10 (完整学习过程屏幕记录视频地址在文末) 原计划今天应当可以解决读取所有页的目录并转而取出所有新闻的功能,不过由于学习时间不够,只是进 ...

  5. Python爬虫之selenium的使用(八)

    Python爬虫之selenium的使用 一.简介 二.安装 三.使用 一.简介 Selenium 是自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏 ...

  6. Python 爬虫从入门到进阶之路(八)

    在之前的文章中我们介绍了一下 requests 模块,今天我们再来看一下 Python 爬虫中的正则表达的使用和 re 模块. 实际上爬虫一共就四个主要步骤: 明确目标 (要知道你准备在哪个范围或者网 ...

  7. 小白学 Python 爬虫(41):爬虫框架 Scrapy 入门基础(八)对接 Splash 实战

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  8. python爬虫Scrapy(一)-我爬了boss数据

    一.概述 学习python有一段时间了,最近了解了下Python的入门爬虫框架Scrapy,参考了文章Python爬虫框架Scrapy入门.本篇文章属于初学经验记录,比较简单,适合刚学习爬虫的小伙伴. ...

  9. Python爬虫(1):基础知识

    爬虫基础知识 一.什么是爬虫? 向网站发起请求,获取资源后分析并提取有用数据的程序. 二.爬虫的基本流程 1.发起请求 2.获取内容 3.解析内容 4.保存数据 三.Request和Response ...

随机推荐

  1. Python基础学习参考(一):python初体验

    一.前期准备 对于python的学习,首先的有一个硬件电脑,软件python的运行环境.说了一句废话,对于很多初学者而言,安装运行环境配置环境变量的什么的各种头疼,常常在第一步就被卡死了,对于pyth ...

  2. Windows 配置 allure report 环境

    1:配置Java环境(运行allure 需要) 2:安装powershell 3:安装scoop方法 :运行 powershell 输入 : iex (new-object net.webclient ...

  3. SQL Server 行转列,列转行。多行转成一列

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...

  4. 非对称加密技术- RSA算法数学原理分析

    非对称加密技术,在现在网络中,有非常广泛应用.加密技术更是数字货币的基础. 所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密. 但是对于其原理大部分同学应 ...

  5. C#中制作MDI窗体

    在VB中做 MDI窗体很简单.在C#里就没有这个轻松了,不过还是很方便的. 首先在C#里添加一个窗体,命名为MdiMain,将其IsMdiContainer设定成true,这样MDI主窗体就建立了.然 ...

  6. [转载] 深入了解Java ClassLoader、Bytecode 、ASM、cglib

    转载自http://www.iteye.com/topic/98178   一.Java ClassLoader 1,什么是ClassLoader 与 C 或 C++ 编写的程序不同,Java 程序并 ...

  7. 插入排序-Python与PHP实现版

    插入排序Python实现 import random a=[random.randint(1,999) for x in range(0,36)] # 直接插入排序算法 def insertionSo ...

  8. Python 日志处理(二) 使用正则表达式处理Nginx 日志

    使用正则表达式来处理Nginx 日志 一. 先对单行的日志进行分组正则匹配,返回匹配后的结果(字典格式): from datetime import datetime import re #单行日志 ...

  9. win10环境下tensorflow-gpu安装

    踩了很多坑,浪费了一下午时间,在此记录一下. pip install tensorflow-gpu 然后下载安装cuda8.0 https://developer.nvidia.com/cuda-do ...

  10. SpringMVC 视图解析器

    SpringMVC 视图解析器 还记得SpringMVC 快速入门中,dispatcher-servlet.xml 配置的视图解析器么.它是SpringMVC 的核心知识点.本章节比较简单,明白视图解 ...