一、什么是requests

Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库。

相对于urllib库(自带,无需手动安装)而言,requests库的使用显得简单便捷(本质就是封装了urllib3)。

官方文档:http://cn.python-requests.org/zh_CN/latest/

二、requests的安装

1.电脑运行ctrl+R输入cmd(命令提示符)

2.运行pip install requests安装 

三、requests库的使用

在requests库中,我们常用的是requests.get()和requests.post()

post请求与get请求区别:

1.在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。

2.GET方式提交的数据最多只能有1024 Byte,而POST则没有此限制。

3.安全性问题。正如在(1)中提到,使用Get的时候,参数会显示在地址栏上,而Post不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用post为好。

requests.get()

import requests

response = requests.get('http://www.baidu.com')   #获取百度的源码
response.encoding = response.apparent_encoding #程序分析源码采用的编码格式
print(response.text) #打印源码

其实,我们在使用过程中经常需要传递一些参数,如百度搜索python,这时我们就可以通过拼接构造URL的方式实现,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。

例如:http://www.baidu.com/s?wd=python中Requests 允许你使用 params 关键字参数,以一个字典来提供这些参数。

import requests

url = 'http://www.baidu.com/s'
params = {
'wd':'python'
}
response = requests.get(url,params=params) #传入参数
response.encoding = response.apparent_encoding
print(response.url) #返回http://www.baidu.com/s?wd=python

当然,你也可以使用最简单的拼接

url = 'http://www.baidu.com/s?wd=' + 'python'
response = requests.get(url)
print(response.url) #返回http://www.baidu.com/s?wd=python

拓展知识:

你还可以将一个列表作为值传入:

import requests
params = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get('http://httpbin.org/get', params=params)
print(r.url)
# 打印的结果是
#http://httpbin.org/get?key1=value1&key2=value2&key2=value3

requests.post()

import requests

data = {
"name":"zhaofan",
"age":23
}
response = requests.post("http://httpbin.org/post",data=data)
print(response.text)
'''
返回
{
"args": {},
"data": "",
"files": {},
"form": {
"age": "23",
"name": "zhaofan"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "19",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.20.0"
},
"json": null,
"origin":,
"url": "https://httpbin.org/post"
} '''

其他HTTP请求类型:PUT,DELETE,HEAD 以及 OPTIONS其实都是差不多的用法

r = requests.put('http://httpbin.org/put', data = {'key':'value'})
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/get')
r = requests.options('http://httpbin.org/get')

四、定制请求头

网站建立的最终目的是让人来访问的,其实几乎每个网站都是拒绝爬虫的,因此引出各种各样的反爬手段,那么网站是靠什么来判定我们是爬虫的?

方法有很多,其中最普遍的是通过请求头来判断。

在发送HTTP请求的时候浏览器都会带上请求头信息等,如果我们的程序没有带上,或者带上的请求头信息是错误的,也就是不被服务器认可的,那么就会遭到服务器的拒绝!

import requests

url = 'http://www.baidu.com/s'
params = {
'wd':'python'
}
#请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
}
response = requests.get(url,params=params,headers=headers)

此外,我们也可以通过fake_useragent来随机生成一个请求头

from fake_useragent import UserAgent

us = UserAgent()
print(us.random) #打印随机生成的请求头

注意:我们只是加上了User-Agent信息就可以正常访问了,但是浏览器是发送了比我们更多的信息的。如果遇到加上请求头User-Agent信息也不成功的网站,可以尝试添加其他请求头信息。

五、响应状态码

import requests

url = 'http://www.baidu.com/'
response = requests.get(url)
print(response.status_code) #返回200

相关的响应状态码请访问网友的博客:https://www.cnblogs.com/dekui/p/7801289.html

六、cookie

现在的网站中有这样的一种网站类型,也就是需要用户注册以后,并且登陆才能访问的网站,或者说在不登录的情况下不能访问自己的私有数据,例如微博,微信等。

网站记录用户信息的方式就是通过客户端的Cookie值。例如:当我们在浏览器中保存账号和密码的同时,浏览器在我们的电脑上保存了我们的用户信息,并且在下次访问这个页面的时候就会自动的为我们加载Cookie信息。

在需要登陆的网站中,浏览器将Cookie中的信息发送出去,服务器验证Cookie信息,确认登录。既然浏览器在发送请求的时候带有Cookie信息,那么我们的程序同样也要携带Cookie信息。

Cookie是当你访问某个站点或者特定页面的时候,留存在电脑里的一段文本,它用于跟踪记录网站访问者的相关数据信息,比如:搜索偏好、行为点击,账号,密码等内容。

通常Cookie值信息可以在浏览器中复制过来,放到headers中:

headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', # 浏览器中复制
'Host': 'www.lagou.com',
'Origin': 'https://www.lagou.com',
'Referer': 'https://www.lagou.com/jobs/list_Python?labelWords=&fromSearch=true&suginput=',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36',
'X-Anit-Forge-Code': '',
'X-Anit-Forge-Token': 'None',
'X-Requested-With': 'XMLHttpRequest',
}

python day1-requests的更多相关文章

  1. Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗

    介绍   本篇博客将会介绍一个Python爬虫,用来爬取各个国家的国旗,主要的目标是为了展示如何在Python的requests模块中使用POST方法来爬取网页内容.   为了知道POST方法所需要传 ...

  2. Python——安装requests第三方库

    使用pip安装 在cmd下cd到这个目录下C:\Python27\Scripts,然后执行pip install requests 在cmd 命令行执行 E:   进入e盘 cd  Python\pr ...

  3. 关于Python ,requests的小技巧

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xie_0723/article/details/52790786 关于 Python Request ...

  4. Python之Requests的高级用法

    # 高级用法 本篇文档涵盖了Requests的一些更加高级的特性. ## 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个Session实例发出的所有请求之间保持cookies. 会话对象 ...

  5. python的requests快速上手、高级用法和身份认证

    https://blog.csdn.net/qq_25134989/article/details/78800209 快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其 ...

  6. Python 安装requests和MySQLdb

    Python 安装requests和MySQLdb 2017年10月02日 0.系统版本 0.1 查看系统版本 [root@localhost ~]# uname -a Linux localhost ...

  7. 【转】使用Python的Requests库进行web接口测试

    原文地址:使用Python的Requests库进行web接口测试 1.Requests简介 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写, ...

  8. Python+Unittest+Requests+PyMysql+HTMLReport 接口自动化框架

    整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport  多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLR ...

  9. 对比3种接口测试的工具:jmeter+ant;postman;python的requests+unittest或requests+excel

    这篇随笔主要是对比下笔者接触过的3种接口测试工具,从实际使用的角度来分析下3种工具各自的特点 分别为:jmeter.postman.python的requests+unittest或requests+ ...

  10. python day1 python介绍,安装及运算符

    目录 python day1 1. 不同编程语言的对比 2. 为什么学python? 3. python的种类 4. python的安装(windows系统) 5. 导入模块或包 6. pyc文件 7 ...

随机推荐

  1. python 小题

    python 小题:给定一个字符串,找出不含有重复字符的最长子串的长度.示例 1:输入: "abcabcbb"输出: 3 解释: 无重复字符的最长子串是 "abc&quo ...

  2. 汇总apply()、call()、bind()用法详解

    先看明白下面: 例 1 obj.objAge; // 17 obj.myFun() // 小张年龄 undefined 例 2 shows() // 盲僧 比较一下这两者 this 的差别,第一个打印 ...

  3. js 复杂研究

    function test_001() { var t =0; return t || out_str("t未定义"), //1 // 执行1句;在执行2句; t||null // ...

  4. C++中string常用函数用法总结

    string(s小写)是C++标准库中的类,纯C中没有,使用时需要包含头文件#include<string>,注意不是<string.h>,下面记录一下string中比较常用的 ...

  5. jenkins 打标签实现回滚

    背景介绍: 本项目代码存储在gitlab,再通过jenkins发布到对应的节点上. 使用tag控制版本:每一次成功的构建,jenkins会自动为gitlab的分支打上tag,版本更新可直接选择prod ...

  6. 使用mysql以及连接数据库

    MySQL Table of Contents 1. 安装与配置 2. 数据库与账户 3. 用户跟权限 4. 常用命令 5. 表的创建 6. 数据类型 7. 主键约束 8. 表的修改 9. 引擎(En ...

  7. 移动开发与PC开发区别

    移动开发领域与PC 开发得区别,总结为:3低, 3高,3有限.开发移动程序是应该时刻记住这9个限制. 3低         低处理能力         低分辨率         低速的数据传输能力   ...

  8. 你是一直认为 count(1) 比 count(*) 效率高么?

    MySQL count(1) 真的比 count(*) 快么? 反正同事们都是这么说的,我也姑且觉得对吧,那么没有自己研究一下究竟?如果我告诉你他们一样,你信么? 有 Where 条件的 count, ...

  9. MySQL Online DDL工具

    MySQL在线表结构变更工具 MySQL的大表表结构变更常用的解决方案无外乎三种: 一是利用Percona的pt-online-schema-change,Facebook的OSC等三方工具, 二是在 ...

  10. 清北学堂2019.7.18 & 清北学堂2019.7.19

    Day 6 钟皓曦 经典题目:石子合并 可以合并任意两堆,代价为数量的异或(^)和 f[s]把s的二进制所对应石子合并成一堆所花代价 枚举s的子集 #include<iostream> u ...