文章目录

  • 发出请求
  • 响应内容
  • 响应状态码
  • 请求头headers处理
  • Cookie处理
  • 重定向与历史信息
  • 超时设置

发出请求

首先导入Requests模块

import requests

现在,我们尝试获取一个网页

r = requests.get(‘https://api.github.com/events’)

现在,我们有一个名为 r 的 Requests 的对象。我们可以从这个对象获取我们需要的所有信息

接下来演示一下POST请求方式:

postdata = {‘key’ : ‘value’}
r = requests.post(‘https://passport.csdn.net/account/login’, data = postdata)

在URL中传递参数
你可能见过类似这样的URL:http://hhh2333.com/get?key=val&key2=val2,就是在网站后面紧跟着“?”,“?”后面还有参数。那么这样的GET请求在requests中可以这样写:

payloda = {“key1” : “value1”, “key2” : “value2”}
r = requests.get(“https://blog.csdn.net/UserPython”, params = payload)

你可以通过打印URL看到URL已经正确编码,问号自动添加

pirnt(r.url)
//https://blog.csdn.net/UserPython?hhh=2333&HHH=3332

import requestspayload = {"hhh" : "2333", "HHH" : "3332"}r = requests.get("https://blog.csdn.net/UserPython", params = payload)print(r.url)
"""
result: https://blog.csdn.net/UserPython?hhh=2333&HHH=3332
"""

响应内容

文本形式响应内容

import requests
r = requests.get(‘http://www.baidu.com’)
print(r.text)

其中r.text返回的是文本形式,当发出请求时,Requests会根据HTTP标头猜测网页编码格式进而解析文本。如果解析文本出现乱码,可以通过r.encoding查看使用什么编码格式解析,并进行更改

print(r.encoding)
// result:ISO-8859-1
r.encoding = "utf-8"

import requestsr = requests.get("http://www.baidu.com")# 查看Requests使用什么编码格式解码,r.encoding返回的是根据HTTP头猜测的网页编码格式
print(r.encoding)
"""
result: ISO-8859-1
"""# 自行查看源网页的编码格式为UTF-8所以要更改
r.encoding = "utf-8"print(r.text)
"""
更正后,爬取的HTML网页没有乱码
"""

这种手动的方式略显笨拙,下面提供一种更加简便的方式:chardet,这是一个字符串/文件编码检测模块,使用chardet.detect()返回字典,其中encoding是源网页的编码格式,confidence是检测精确度,示例如下:

import requests
import chardetr = requests.get("http://www.baidu.com")print(chardet.detect(r.content))
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}r.encoding = chardet.detect(r.content)["encoding"]print(r.text)

二进制响应内容

对于非文本请求,还可以以字节为单位访问响应正文

print(r.content)
//返回二进制内容

响应状态码

查看响应状态码

r = requests.get(“http://www.baidu.com”)
print(r.status_code)
//200

请求还附带内置状态码查找对象,以便于参考:

print(requests.codes.ok)
//200

import requestsr = requests.get("http://www.baidu.com")if r.status_code == requests.codes.ok:# 获取响应码print(r.status_code)# 获取响应头print(r.headers)# 获取响应头中某个字段,推荐使用这种方式print(r.headers.get("content-type"))print(r.headers["content-type"]) # 不推荐使用
else:r.raise_for_status()

上述程序中,r.headers包含所有的响应头信息,可以通过get函数获取其中的某一个字段,也可以通过字典引用的方式获取字典值,但是不推荐,因为如果字段中没有这个字段,第二种方式会抛出异常,第一种方式会返回None。r.raise_for_status()是用来主动地产生一个异常,当响应码是4xx或5xx时,raise_for_status()函数会抛出异常,而响应码为200时,raise_for_status()函数返回None

请求头headers处理

在Requests的get函数中添加headers参数即可,如下所示:

import requestsuser_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/69.0.3497.100"headers = {"User_Agent" : user_agent}r = requests.get("http://www.baidu.com", headers = headers)print(r.content.decode("utf-8"))

Cookie处理

如果响应中包含Cookie的值,可以如下方式获取Cookie字段的值

import requestsuser_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 "headers = {"User_Agent" : "user_agent"}r = requests.get("http://www.baidu.com", headers)# 遍历出所有cookie字段的值
for cookie in r.cookies.keys():print(cookie + ":" + r.cookies.get(cookie))

自动处理Cookie

希望每次访问时,程序自动把Cookie的值带上,像浏览器一样。Requests提供了一个session的概念,在连续访问网页,处理登录跳转时特别方便,不需要关注具体细节

import requestsloginUrl = "http://www.hhh.com/login"s = requests.Session()#首先访问登录界面,作为游客,服务器会先分配一个cookie
r = s.get(loginUrl, allow_redirects = True)datas = {"name" : "UserH", "passwd" : "UserH"}# 向登录连接发送POST请求,验证成功,游客权限转为会员权限r = s.post(loginUrl, data = datas, allow_redirects = True)print(r.text)

上述程序,如果没有第一步访问登录的页面,而是直接向登录链接发送POST请求,系统会把你当做非法用户,因为访问登录界面时会分配一个cookie,需要将这个cookie在发送POST请求时带上,这种使用session函数处理Cookie的方式之后会很常用。

重定向与历史信息

重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置。重定向是网页制作中的一个知识,如:你现在所处的位置是一个论坛的登录页面,你填写了账号,密码,点击登录,如果你的账号密码正确,就自动跳转到论坛的首页,不正确就返回登录页;这里的自动跳转,就是重定向的意思。或者可以说,重定向就是在网页上设置一个约束条件,条件满足,就自动转入到其他网页、网址

处理重定向只是需要设置一下allow_redirects字段即可,例如r = requests.get(“http://www.baidu.com”, allow_redirects = True)。将allow_redirects设置为True,则是允许重定向;设置为False,则是禁止重定向,如果是允许重定向,可以通过r.history字段查看历史信息,即可访问成功之前的所有请求跳转信息

import requestsr = requests.get('http://github.com', allow_redirects=True)print(r.url)
# // https://github.com/print(r.status_code)
# // 200print(r.history)
# // [<Response [301]>]

上面的示例代码显示的效果是访问GitHub网址时,会将所有的HTTP请求全部重定向到HTTPS

超时设置

超时选项是通过参数timeout来进行设置的。可以通过参数timeout告知请求在给定秒数后停止等待响应。几乎所有生产代码都应该在几乎所有请求中使用此参数。如果不这样做可能会导致程序无限期挂起。

requests.get( “http://github.com”, timeout = 2)

Python爬虫_Requests相关推荐

  1. python爬虫_requests获取小黄人表情保存到文件夹

    文章目录 ⭐前言

  2. 关于Python爬虫原理和数据抓取1.1

    为什么要做爬虫? 首先请问:都说现在是"大数据时代",那数据从何而来? 企业产生的用户数据:百度指数.阿里指数.TBI腾讯浏览指数.新浪微博指数 数据平台购买数据:数据堂.国云数据 ...

  3. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  4. python爬虫抓取信息_python爬虫爬取网上药品信息并且存入数据库

    我最近在学习python爬虫,然后正好碰上数据库课设,我就选了一个连锁药店的,所以就把网上的药品信息爬取了下来. 1,首先分析网页 2,我想要的是评论数比较多的,毕竟好东西大概是买的人多才好.然后你会 ...

  5. python爬虫案例_推荐上百个github上Python爬虫案例

    现在学生都对爬虫感兴趣,这里发现一些好的github开源的代码,分享给各位 1.awesome-spider 该网站提供了近上百个爬虫案例代码,这是ID为facert的一个知乎工程师开源的,star6 ...

  6. Python培训分享:python爬虫可以用来做什么?

    爬虫又被称为网络蜘蛛,它可以抓取我们页面的一些相关数据,近几年Python技术的到来,让我们对爬虫有了一个新的认知,那就是Python爬虫,下面我们就来看看python爬虫可以用来做什么? Pytho ...

  7. 玩转 Python 爬虫,需要先知道这些

    作者 | 叶庭云 来源 | 修炼Python 头图 | 下载于视觉中国 爬虫基本原理 1. URI 和 URL URI 的全称为 Uniform Resource Identifier,即统一资源标志 ...

  8. 买不到口罩怎么办?Python爬虫帮你时刻盯着自动下单!| 原力计划

    作者 | 菜园子哇 编辑 | 唐小引 来源 | CSDN 博客 马上上班了,回来的路上,上班地铁上都是非常急需口罩的. 目前也非常难买到正品.发货快的口罩,许多药店都售完了. 并且,淘宝上一些新店口罩 ...

  9. 一个月入门Python爬虫,轻松爬取大规模数据

    如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样一个月入门Python爬虫,轻松爬的编程语言提供越来越多的优秀工具,让爬虫 ...

最新文章

  1. Ubuntu 安装软件方法
  2. 短短6小时,AI设计出40000种毒气分子,很多毒性远超战用神经毒剂
  3. 人工智能时代,最先占领高维度空间
  4. jQuery 特殊选择器this
  5. 大数问题(一个特别大的数需要用数组或字符串来表示)
  6. MongoDB数据库可视化工具实现删除功能
  7. 程序员们,节日快乐!
  8. 推荐:PHPCMS v9 安全防范教程!
  9. 蓝桥杯 ADV-117 算法提高 进制转换
  10. Linux安装nginx详细步骤
  11. 函数最值题目及答案_高考数学攻克压轴题:圆锥曲线取值范围和最值问题解题模型...
  12. JavaScript - 自定义鼠标右键菜单
  13. 3376.成绩排序2
  14. [转]音乐天堂 Music Heaven Vol.1 ~ Vol.36 的目录
  15. 融入动画技术的交互应用-雪花
  16. matlab数字图像处理:时空域图像增强
  17. Spring Security OAuth2实现使用JWT
  18. python筛选股票_GitHub - sundroid/stock_pick: 这时一个通过设定选股条件来帮我们筛选股票的python程序...
  19. Maven的配置、安装及测试可用
  20. oracle备库归档文件没有应用,主库拷贝归档日志过备库,无法应用

热门文章

  1. 计算机考研408试题及答案,2015年计算机专业408考研试题及答案
  2. mysql使用条件限制乐观锁_使用Mysql乐观锁解决并发问题
  3. 2020护网参考学习 关于护网行动的总结
  4. php查询记录是否存在,php – 如果记录存在,我可以更新记录,如果不存在,可以在单个查询中更新多行吗?...
  5. Bootstrap Table列宽拖动的方法
  6. delphi中保留字的属性和含义
  7. docker学习(一)在centos7上安装与启动docker
  8. 2018-12-25 上机作业
  9. 现代软件工程_团队项目_阿尔法阶段_现有功能汇总_2018.01.04
  10. java环境配置——配置tomcat用户