爬虫基础Requests 之(四) --- Requests模块

什么是Requests

Requests是采用Apache2 Licensed开源协议的HTTP库,用python语言基于urllib编写的。
使用 Requests会比urllib更加方便,可以节约我们大量的工作。Requests是python实现的最简单易用的HTTP库。

Requests模块 需要单独通过pip安装(pip install Requests)

requests功能介绍

很多情况下的网站如果直接response.text会出现乱码的问题,所以使用response.content,这样获取的数据是二进制数据;同样的,这个方法也可以用于下载图片以及视频资源

这样返回的数据格式其实是二进制格式,然后通过decode()转换为utf-8,这样就解决了通过response.text直接返回显示乱码的问题.

请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 response.text 之时,Requests 会使用其推测的文本编码。你可以找出 Requests 使用了什么编码,并且能够使用 response.encoding 属性来改变它.

不管是通过response.content.decode("utf-8)的方式还是通过response.encoding="utf-8"的方式都可以避免乱码的问题发生

requests提供的请求方式

1 import requests
2 
3 requests.post("http://httpbin.org/post")     # 向HTML网页提交POST请求方法,对应HTTP的POST
4 requests.put("http://httpbin.org/put")       # 向HTML网页提交PUT请求的方法,对应HTTP的PUT
5 requests.delete("http://httpbin.org/delete") # 向HTML页面提交删除请求,对应HTTP的DELETE
6 requests.head("http://httpbin.org/get")      # 获取HTML网页头的信息方法,对应HTTP的HEAD
7 requests.get("http://httpbin.org/get")       # 获取HTML网页的主要方法,对应HTTP的GET

GET请求

  • 简单get请求
1 import requests
2 response = requests.get('http://httpbin.org/get')
3 print(response.text)
  • 带参get请求
1 import requests
2 response = requests.get("http://httpbin.org/get?name=zhaofan&age=23")
3 print(response.text)

若想要在URL查询字符串传递数据,通常通过httpbin.org/get?key=val方式传递。

Requests模块允许使用params关键字传递参数,以一个字典来传递这些参数。

1 import requests
2 data = {
3      "name":"guomuzi",
4      "age":25
5 }
6 response = requests.get("http://httpbin.org/get",params=data)。
7 # 通过params参数传递一个字典内容,从而直接构造url
8 print(response.url)
9 print(response.text)

注意:第二种方式通过字典的方式的时候,如果字典中的参数为None则不会添加到url上

  • 添加headers

Requests和urllib模块一样可以定制headers的信息,当直接通过requests请求某些网站的时候,默认是无法访问的,因为有的网站需要头部信息,在谷歌浏览器地址栏输入 chrome://version 查看用户代理,将用户代理添加到头部信息

1 import requests
2 
3 headers = {
4     "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
5 }
6 response =requests.get("https://www.zhihu.com",headers=headers)
7 
8 print(response.text)

POST请求

通过在发送post请求时添加一个data参数,这个data参数可以通过字典构造成,这样对于发送post请求就非常方便

同样在发送post请求的时候也可以和发送get请求一样通过headers参数传递一个字典类型的请求头数据

1 import requests
2 
3 data = {
4     "name":"zhaofan",
5     "age":23}
6 response = requests.post("http://httpbin.org/post",data=data)
7 print(response.text)

response响应

可以通过response获得很多属性.

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

print(type(response.status_code),response.status_code) # 获取响应类型 和 状态码信息
print(type(response.headers),response.headers)         # 获取响应类型 和 头部信息
print(type(response.cookies),response.cookies)         # 获取响应类型 和 cookie信息
print(type(response.url),response.url)                 # 获取响应类型 和 URL信息
print(type(response.history),response.history)         # 获取响应类型 和 响应历史信息
print(type(response.text),response.text)       # 获取响应类型 和 返回的是 unicode型的文本数据
print(type(response.content),response.content) # 获取响应类型 和 返回的是 bytes 型的二进制数据

状态码判断
     Requests还附带了一个内置的状态码查询对象
     例如:200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\o/', '✓')

import requests

response= requests.get("http://www.baidu.com")
if response.status_code == requests.codes.ok:
    print("访问成功")

解析json

requests里面集成的json其实就是执行了json.loads()方法,两者的结果是一样的

import requests
import json
response = requests.get("http://httpbin.org/get")

print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json()))

requests高级用法

文件上传

实现方法和其他参数类似,也是构造一个字典然后通过files参数传递

1 import requests
2 
3 files= {"files":open("git.jpeg","rb")}
4 response = requests.post("http://httpbin.org/post",files=files)
5 print(response.text)

结果如下:

获取cookie

import requests

response = requests.get("http://www.baidu.com")
for key,value in response.cookies.items():
    print(key+"="+value)

会话维持

cookie的一个作用就是可以用于模拟登陆,做会话维持

import requests

s = requests.Session()
s.get("http://httpbin.org/cookies/set/number/123456")
response = s.get("http://httpbin.org/cookies")
print(response.text)

证书验证

现在的很多网站都是https的方式访问,所以就涉及到证书的问题

例如 默认的12306网站的证书是不合法的,会提示如下错误,为了避免这种情况的发生可以通过verify=False,但是这样是可以访问到页面,但是会提示:

InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning)

解决方法为:

import requests
from requests.packages import urllib3

urllib3.disable_warnings()
response = requests.get("https://www.12306.cn",verify=False)
print(response.status_code)

代理设置

 1 import requests
 2 
 3 proxies= {
 4     "http":"http://127.0.0.1:9999",
 5     "https":"http://127.0.0.1:8888"
 6 }
 7 
 8 # 如果代理需要设置账户名和密码,需要将字典更改为如下:
 9 proxies = {
10 "http":"http://user:password@127.0.0.1:9999"
11 }
12 
13 # 如果代理是通过sokces这种方式,则需要pip install "requests[socks]"
14 proxies= {
15 "http":"socks5://127.0.0.1:9999",
16 "https":"sockes5://127.0.0.1:8888"
17 }
18 
19 response  = requests.get("https://www.baidu.com",proxies=proxies)
20 print(response.text)

超时设置   通过timeout参数可以设置超时的时间

认证设置

如果碰到需要认证的网站可以通过requests.auth模块实现

1 import requests
2 from requests.auth import HTTPBasicAuth
3 
4 response = requests.get("http://120.27.34.24:9001/",auth=HTTPBasicAuth("user","123"))
5 print(response.status_code)
6 
7 # 还可以
8 response = requests.get("http://120.27.34.24:9001/",auth=("user","123"))
9 print(response.status_code)

异常处理

所有的异常都是在requests.excepitons中

 详细的可以看:http://cn.python-requests.org/zh_CN/latest/_modules/requests/exceptions.html#RequestException

 1 import requests
 2 from requests.exceptions import ReadTimeout,ConnectionError,RequestException
 3 
 4 try:
 5     response = requests.get("http://httpbin.org/get",timout=0.1)
 6     print(response.status_code)
 7 except ReadTimeout:
 8     print("timeout")
 9 except ConnectionError:
10     print("connection Error")
11 except RequestException:
12     print("error")

其实最后测试可以发现,首先被捕捉的异常是timeout,当把网络断掉的haul就会捕捉到ConnectionError,

如果前面异常都没有捕捉到,最后也可以通过RequestExctption捕捉到

 

转载于:https://www.cnblogs.com/TMMM/p/10834496.html

网络爬虫基础——【requests】模块详解 requests是一种Python的HTTP模块,requests模块可以处理URL编码,会话cookie和HTTP基本身份验证等功能。与urllib库相比,requests提供了简便易用的API,使用更加方便。同时requests是一种流行的Python网络请求库,它不仅易于使用,而且功能还十分强大,由于requests模块易于使用,因此很适合初学者入手学习网络爬早。 阅读详情

相关推荐

Python 网络爬虫进阶教学全指南

本次博客将深入探究 Python 网络爬虫的核心知识与实用技巧,引领大家从入门迈向精通

安年的小小博客有大大的梦想 4031

python的requests库简介

requests是python的一个简单易用的爬虫框架。

geter_CS的博客 2084

Python 网络爬虫入门与实战

网络爬虫(Web Crawler)是自动访问网络并提取信息的程序。它可以模拟人类用户在浏览器中的行为,访问网页、抓取数据并存储到本地或数据库中。网络爬虫在信息检索、数据挖掘、搜索引擎等领域有广泛应用。Scrapy 是一个强大的爬虫框架,支持异步处理和数据存储。它适合大型爬虫项目,可以高效抓取和解析数据。yield item通过本文的学习,您应该对 Python 网络爬虫有了全面的了解。从基础的 Requests 库到高级的 Scrapy 框架,再到实战案例,涵盖了网络爬虫的方方面面。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 2214

【Pycharm -requests框架介绍及简单运用】

requets基础入门

weixin_39392703的博客 804

Python 网络爬虫入门与实践:从基础到高级技巧

详细介绍了 Python 网络爬虫的基础知识、常用库、实战案例以及高级技巧

AI+全栈,AI+应用,实操落地,前沿技术 1691

Python-网络爬虫

网络爬虫(Web Spider)又称网络蜘蛛或网络机器人,是一段用来实现自动采集网站数据的程序。网络爬虫不仅能够为搜索引擎采集网络信息,而且还可以作为定向信息采集器,定向采集某些网站中的特定信息。对于定向信息的爬取,网络爬虫主要采取数据抓取、数据解析、数据入库的操作流程。(1)数据抓取:发送构造的HTTP请求,获得包含所需数据的HTTP响应;(2)数据解析:对HTTP响应的原始数据进行分析、清洗,以提取出所需要的数据;(3)数据入库:将数据进一步保存到数据库(或文本文件)中,用于构建知识库。

qq_42759120的博客 1758

网络爬虫是什么?怎么学python爬虫

网络爬虫又称网络蜘蛛、网络机器人,它是一种按照一定的规则自动浏览、检索网页信息的程序或者脚本。网络爬虫能够自动请求网页,并将所需要的数据抓取下来。通过对抓取的数据进行处理,从而提取出有价值的信息。

Itmastergo的博客 3万+

从华为杯建模到论文录用:我的Biomedical Signal Processing and Control投稿全记录(含Latex模板与审稿人推荐技巧)

本文详细记录了作者从华为杯数学建模竞赛到Biomedical Signal Processing and Control期刊投稿的全过程,分享了如何将竞赛成果转化为学术论文的实用技巧,包括LaTeX排版中的常见陷阱与解决方案,以及审稿人推荐策略。特别提供了针对Elsevier模板的优化建议和高效回复审稿意见的方法,适合生物医学信号处理领域的研究者参考。

weixin_42549037的博客 454

零基础爬虫入门(一) | 初识网络爬虫

本篇博文主要介绍网络爬虫的基本概念、工作原理以及开发环境。 我们为什么要了解网络爬虫? 因为当今从事科学研究等,需要大量的数据,但是这些数据公开的又非常的少,大量的数据都在大公司的手中。我们这些普通人本身并没有那么多数据,但是我们又需要大量的数据。那么,这时我们就需要用到网络爬虫了。 Chapter01 | 初识网络爬虫一、什么是网络爬虫1、爬虫产生的背景1.1、万维网的高速发展1.2、搜索引...

不温卜火 6722

基于多智能体协作的量化交易研究框架TradingAgents详解

量化交易系统通过算法模型分析市场数据,旨在实现自动化投资决策。其核心原理在于利用计算机强大的数据处理能力,结合统计学和机器学习方法,从历史数据中挖掘可重复的盈利模式。这一技术的价值在于能够克服人类情绪干扰,实现纪律性交易,并快速处理海量信息。在应用场景上,量化策略广泛应用于股票、期货、外汇等多个金融市场。本文聚焦的TradingAgents框架,创新性地引入了**多智能体协作**和**对抗性验证**机制,通过模拟真实投研团队的分工与辩论流程,构建了一个研究友好、决策过程可解释的量化交易研究平台,为探索大语言

weixin_36019375的博客 431

全本地AI代理实战:零数据外泄的本地化Agent工作流搭建

全本地AI代理是一种将大语言模型推理、长期记忆与工具调用完全运行于用户本地设备的智能体架构,其核心原理在于通过进程隔离与标准化协议实现模型层、记忆层和工具层的解耦协同。相比依赖云端API的传统方案,它在数据主权、响应确定性与环境复现性上具备不可替代的技术价值。典型应用场景包括法务合规文档处理、离线工业现场辅助决策、以及高敏感度企业知识管理。本文聚焦Qwen2+Ollama+SurrealDB+Agno技术栈,详解如何构建可落地的全本地AI代理系统,覆盖从硬件适配、向量记忆建模到多模态插件协同的完整链路。

weixin_34194964的博客 650

网络爬虫基础知识与应用指南

网络爬虫(Crawler),又被称为网页蜘蛛(Spider)、网络机器人,是一种按照一定规则,自动抓取万维网信息的程序或脚本。常见的应用案例包括 Google、百度、Bing 等搜索引擎,它们通过爬虫技术从互联网上获取海量信息并建立索引。

wsygjbr的博客 2338

【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架

基于二人爱情耦合系统动力学、稳定性与最优策略的综合性理论的数值模拟与分析

weixin_44695861的博客 1134

小白学Python,网络爬虫篇(1)——requests库

网络爬虫通俗来讲就是使用代码将 HTML 网页的内容下载到本地的过程。爬取网页主要是为了获取网页中的关键信息,例如网页中的数据、图片、视频等。Python 语言中提供了多个具有爬虫功能的库,下面将具体介绍。urllib 库:是 Python 自带的标准库,无须下载、安装即可直接使用。urllib 库中包含大量的爬虫功能,但其代码编写略微复杂。requests 库:是 Python 的第三方库,需要下载、安装之后才能使用。

2201_75607087的博客 3532

迈创Cameralink采集卡与MIL软件集成开发实战指南

本文详细介绍了迈创Cameralink采集卡与MIL软件的集成开发实战指南,涵盖硬件安装、驱动配置、MIL软件深度设置及图像采集处理等关键步骤。特别适合工业视觉检测和医疗影像领域,通过优化配置和性能调优,实现高速稳定的图像处理。

weixin_29204205的博客 423

STM32Cubemx-H7-17-麦克纳姆轮驱动

我们先看.h,知道哪些函数会有哪些功能和宏定义参数首先 是在.h的宏定义处定义引脚编号,比如tb6612控制方向的引脚,以及设定了哪个定时器作为pwm输出,还有编码计次的中断引脚/* 硬件相关宏定义 *//*1 前进方向往上 42 3*/// TB6612 方向引脚定义/* 定时器相关宏定义 *//* 编码器相关宏定义 */把自己的引脚根据原理图填对应,方向引脚也是,如果发现反转就把对应的引脚定义反过来,编码也是,编码我们用一个引脚就好,都在cubemx配置好。

m0_74211379的博客 1423

网络爬虫技术

本文介绍了网络爬虫的基础概念与应用。主要内容包括:1)爬虫定义与分类,分为通用、聚焦、增量式和深层网络爬虫四种类型;2)核心工作原理,涉及HTTP请求过程、响应结构和网页基础;3)常见爬取策略如宽度优先(BFS)和深度优先(DFS)遍历;4)Python中Requests库的使用方法,包括请求发送、响应处理和异常捕获。文章通过百度网页爬取实例,展示了网络爬虫从发送请求到获取响应的完整流程,为初学者提供了网络数据采集的基础知识框架。

2302_78993464的博客 2958

【NodeRed】node-red-contrib-opcua实现PLC读写

在之前的博文【Node-RED】node-red-contrib-opcua-server模块使用(1)中,我们介绍了用node-red-contrib-opcua-server模块实现OPCUA服务端的,以及二次开发的内容。本节博文中我们采用官方社区自带的node-red-contrib-opcua组件开展对OPCUA客户端的介绍,详细阐述用该组件中OpcUa-Client节点实现客户端对PLC的读写,以及实现过程中遇到的问题。由于官方社区中并没有找到该组件的介绍实例,这也是本博文编写的第1个原因。

weixin_48618536的博客 958

网络爬虫之Requests库详解(含多个案例)

网络爬虫是一种程序,它的主要目的是将互联网上的网页下载到本地并提取出相关数据。网络爬虫可以自动化的浏览网络中的信息,然后根据我们制定的规则下载和提取信息。

手把手教你学编程 1万+

Panda3d 场景管理

许多简单的 3D 引擎维护一个 3D 模型列表,然后在每一帧对这些模型进行渲染。在这些简单的引擎中,必须分配一个3D模型(或从磁盘加载它),然后将其插入到要渲染的模型列表中。模型在插入到列表中之前对渲染器不“可见”。 Panda3D稍微复杂一些。它不是维护要呈现的对象列表,而是维护要呈现的对象树。对象在插入树之前对渲染器不可见。

u014077947的博客 1383

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

网络爬虫解析

网络爬虫(也称为网页蜘蛛、网络机器人)是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。网络爬虫可以用于从网站提取数据,例如监测社交媒体平台上的活动,或者从网上收集新闻和文章。它们也可以用于搜索引擎,如Google和Bing,来抓取和索引网页,以便在用户进行搜索时提供结果。URL通常由多个部分组成,包括协议类型(如HTTP、HTTPS)、主机名(域名或IP地址)、路径(资源在主机上的位置)以及可选的查询参数(用于传递额外的信息)。通过URL,用户可以方便地访问和定位到特定的网络资源。

2301_82032652的博客 2634

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

网络爬虫(一)——爬虫及其实现

爬虫和简单的实现爬虫

弄鹊 8084

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【python爬虫基础入门】python爬虫requests库使用操作全解

文章目录一.HTTP协议1. HTTP协议的框架2. HTTP协议对资源的操作3. 用户对HTTP协议的操作二.requests库的安装三.requests库的7个主要使用方法1.方法的解析2.方法的使用1) get方法使用2) head方法的使用3) post方法的使用3. requests库的异常处理四.爬取网页的通用代码框架五.requests库爬虫实例1. 对京东商品页面的爬取2. 百度/...

Freedom_Blue的博客 2万+

Python网络爬虫

Python以简单高效著称,在日常工作中用处非常多,处理文件、群发网络请求、爬网页信息等等,现把Python语法总结如下,供后续方便复习查阅。 文章目录一、变量 一、变量

Captain_RB的博客 5704

【Datawhale零基础网络爬虫学习笔记】

本文介绍了零基础网络爬虫的基本概念和学习笔记。爬虫技术可用于自动化获取网络数据,但需遵守robots.txt规范。文章对比了HTTP与HTTPS协议,解释了Web请求过程和服务器渲染与客户端渲染的区别。通过urllib模块示例演示了简单爬虫的实现,并介绍了requests模块的使用。此外,还探讨了请求与响应机制,包括请求头、响应状态码等关键要素,为后续爬虫学习奠定基础。

m0_53118662的博客 3500

Python网络爬虫之requests库

①urllib库:Python自带的标准库,代码编写略微复杂②requests库:第三方库,在urllib库的基础上建立的,但使用起来更简洁方便③scrapy库:第三方库,是一个专业应用程序开发的网络爬虫库④selenium库:第三方库,可用于驱动计算机中的浏览器执行相关命令,而无需用户手动操作。

weixin_72931638的博客 2326
上一篇: 爬虫基础urllib 之(三) --- urllib模块
下一篇: 爬虫解析bs4 之(八) --- bs4模块
baoding4359
博客等级 码龄11年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值