Python requests模块:发送HTTP请求和处理响应

news/2024/10/17 6:25:45/

目录

  • 前言
    • 一、requests模块
    • 二、requests携带参数的方式
    • 三、get请求URL解码编码
    • 四、post请求携带数据编码格式
    • 五、get请求携带请求头
    • 六、post请求携带参数
    • 七、requests.session的使用(可以不用带cookie)
    • 八、requests模块其他参数
    • 九、response对象
    • 十、最后

前言

爬虫是什么?;爬虫就是程序—>从互联网中,各个网站上,爬取数据【前提是:你能浏览的页面才能爬】,做数据清洗,保存到数据库的过程。
爬虫本质:模拟方式发送http请求、然后获取数据、再做数据清洗、最后保存到数据库

爬虫的重点:如何发送http请求?如何解析数据?

本篇爬虫知识主要包括(不会一次性写完,分好几篇文章写完):

  1. 模拟发送http请求(requests模块、selenium)
  2. 反扒(封IP:IP代理、封账号:cookie池)
  3. 解析数据(bs4)
  4. 入库(保存到MySQL、Redis等数据库以及普通文件)
  5. 爬虫框架(scrapy)

一、requests模块

使用python为什么能发送http请求,原因是该模块封装了Python内置模块urllib(起之前用到的urllib,requests模块的api更加便捷,本质就是封装了urllib3)

安装模块

pip install requests

基本使用

import requestsres = requests.get('网址')  # 获取数据发送get请求
print(res.text)  # text 参数可以打印出页面HTML代码

二、requests携带参数的方式

第一:直接在URL后面英文问号拼参数res = requests.get('网址')第二:使用params参数(其实最后效果跟第一种方式一样)
res = requests.get('网址',params={'name':'mire','age':18})

三、get请求URL解码编码

import requests
from urllib.parse import quote, unquoteres = requests.get('网址', params={'name': '无霸哥', 'age': 18})
print(res.url)  # https://docs.qq.com/doc/DVURhUVhkeWZGS3lB"""
我们平时在浏览器上搜关键字,有时候当前网址后面拼搜索关键字但是其已经url编码的具体样子如下
https://www.cnblogs.com/almira998/p/17208674.html?name=%E9%98%BF%E4%B8%BD%E7%B1%B3%E7%83%AD&age=18
怎么样?是不是很眼熟啊,这就是url编码后的效果
"""'''
那么我们可以研究下如编码和解码
首先要导入模块  from urllib.parse import quote, unquote
quote:代表编码
unquote:代表解码
'''# 演示一下编码和解码
res = quote('无霸哥')
print(res)  # %E9%98%BF%E4%B8%BD%E7%B1%B3%E7%83%ADres1 = unquote('%E9%98%BF%E4%B8%BD%E7%B1%B3%E7%83%AD')
print(res1)  # 无霸哥

四、post请求携带数据编码格式

import requests# data对应字典,这样写,编码方式是urlencoded
requests.post(url='xxxxxxxx',data={'xxx':'yyy'})
# json对应字典,这样写,编码方式是json格式
requests.post(url='xxxxxxxx',json={'xxx':'yyy'})
# 终极方案,编码就是json格式
requests.post(url='',data={'':1,},headers={'content-type':'application/json'})

五、get请求携带请求头

# (反爬虫措施之一)
Connection: keep-alive  # 该参数的作用保持链接状态,因为http协议本质是基于TCP协议的(无连接、无状态)
Cookie: 很长的字符串删掉;  # 带着cookie就可以信任为登录状态,请求比较容易成功
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.3  # 表示客户端的类型 比如操作系统浏览器类型等等
import requests# 先用字典的形式包装好
headers = {'Connection':'keep-alive','Cookie':'一堆字符串','User-Agent':'''Referer':'上一个浏览的网址'
}res = requests.get('网址', headers=headers)  # headers=headers表明携带请求头
print(res.text)

六、post请求携带参数

# 发送post请求需要以下参数
"""
1、携带登录信息(用户名、密码、验证码)
2、携带cookie
3、携带请求头headers
"""
import requests 
data = {'username': '','password': '','captcha': '3456','remember': 1,'ref': '网址','act': 'act_login'
}headers = {'Connection':'keep-alive','Cookie':'一堆字符串','User-Agent':''
}
res = requests.get('网址', data=data, headers=headers)
print(res.text)"""
登录一般都是post请求,需要细带cookie
但是有些网站啊有双token认证 严重影响了爬虫的效率
requests.session() 意思就是保持对话
使用requests.session就不用带cookie
"""
# 使用方法
session = requests.session()
res = session.post('网址', data=data)
res1 = session.get('网址')  # 自动保持登录状态,自动携带cookie

七、requests.session的使用(可以不用带cookie)

import requests# 在data参数里需要携带用户名密码验证码等基本信息
data = {'username': '748989764qq.qun','password': 'almira10054X','referer': '网址'
}
# 发post请求,参数里面传data参数session = requests.session()
res = session.post('网址, data=data)print(res.text)

八、requests模块其他参数

# 研究主题:爬取肯德基门店信息
# 目标网址:http://www.kfc.com.cn/kfccda/storelist/index.aspx"""
在浏览器的控制台请求体中解析出来的数据
代码中放到data中发送请求
cname: 
pid: 
keyword: 上海
pageIndex: 1
pageSize: 10
"""
import requestsdata = {'cname': '','pid': '','keyword': '上海','pageIndex': 1,'pageSize': 10,}res = requests.post('http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword', data=data, verify=False)
print(res.json())  # .json()可以解析json格式数据"""发送http请求,返回的数据会有xml格式,也有json格式如果res.text  >>>转的是xml格式如果res.json()   >>>转的是json格式verify=False 该参数不验证证书,报警告,返回200urllib3.disable_warnings() #关闭警告手动携带证书信息即可
"""

九、response对象

# Response相应对象的属性和方法
import requests
headers = {'User-Agent': '一些pc和浏览器配置信息'
}
respone=requests.get('网址',headers=headers)
# respone属性
print(respone.text) # 响应体转成了字符串
print(respone.content) # 响应体的二进制内容print(respone.status_code) # 响应状态码
print(respone.headers)   # 响应头
print(respone.cookies)  # cookie是在响应头,cookie很重要,它单独做成了一个属性
print(respone.cookies.get_dict()) # cookieJar对象---》转成字段
print(respone.cookies.items())  # cookie的键值对print(respone.url)    # 请求地址
print(respone.history) # 不用关注print(respone.encoding)  # 响应编码格式

十、最后

最后,给大家准备的👇👇👇Python资料、源码、整套学习路线图、素材、解答、皆点击下方获取呀👇👇👇

本文所有模块\环境\源码\教程皆可点击此处跳转免费领


http://www.ppmy.cn/news/51200.html

相关文章

026:Mapbox GL加载矢量切片数据源

第026个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载矢量切片数据源。将矢量源添加到地图。使用其 tileset URL(mapbox:// + tileset ID)添加任何 Mapbox 托管的 tileset。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例…

ABAP常用系统变量 (SY-)及SY-SUBRC

abap系统变量在syst结构里面可以找到 SY-SUBRC: 系统执行某指令后,表示执行成功与否的变量,0表示成功 SY-DBLNT: 被处理过的记录的笔数 SY-UNAME: 当前使用者登入SAP的USERNAME SY-DATUM: 当前系统日期 SY-UZEIT: 当前系统时间 SY-TCODE: 当前执行程序的Transaction code …

《类和对象》(下篇)

本文主要讲解类和对象的一些其他小知识。 文章目录 前情回顾一、用运算符重载写一个输入流和输出流①流插入②流提取③流提取和流插入的优化 二、const成员三、用运算符重载改变数组 1、再谈构造函数1.1 构造函数体赋值(不相当于初始化)1.2 初始化列表①引出初始化列表②怎么用…

ROS学习第四十一节——SLAM建图

https://download.csdn.net/download/qq_45685327/87721374 准备工作 请先安装相关的ROS功能包: 安装 gmapping 包(用于构建地图):sudo apt install ros-melodic-gmapping 安装地图服务包(用于保存与读取地图):sudo apt install ros-melodic-map-server 安装 navigation 包…

JSP数据库连接池的研究与实现(源代码+论文)

在基于JDBC的数据库实际应用开发中,对数据库连接的管理是一个重点也是一个难点,频繁对数据库的连接与关闭操作、多客户对数据库的并发访问,一定程度上决定了WEB系统的响应以及应用性能。使用数据库连接池方式能对数据库的连接进行管理和维护,上层应用程序…

Ceph入门到精通-Ceph之对象存储网关RADOS Gateway(RGW)

一、Ceph整体架构及RGW在Ceph中的位置 1.Ceph的整体架构 Ceph是一个统一的、分布式的的存储系统,具有优秀的性能、可靠性和可扩展性。Ceph支持对象存储(RADOSGW)、块存储(RBD)和文件存储(CephFS&#xff…

VR全景摄影,全景VR展示模式

目前,全景概念已经被大众熟知,很多行业尤其是房产、汽车等已经开始大批量使用全景展示的方式提高获客率和推广率。VR全景摄影以全景摄影技术为基础,结合虚拟现实技术,可以让用户身临其境,沉浸式地感受虚拟环境。 一、V…

Mysql列的类型定义——整形类型

文章目录 前言一、整数类型的附带属性 类型名称后面的小括号unsignedauto_increment总结 前言 1)采用26字母和0-9的自然数加上下互相 ‘_’ 组成,命名简洁明确,多个单词用下划线 ‘_’ 隔开 2)全部小写命名,尽量避免…