爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略

news2025/2/5 18:57:19

在这里插入图片描述

简介:本文聚焦 Requests 库的强大功能与应用实战。首先介绍其安装步骤及版本选择要点,随后深入讲解 GET 请求,以百度页面为例,展示如何发起基本 GET 请求、巧妙添加 headers 与参数以精准搜索,以及正确设置 encoding 避免乱码,让您轻松获取所需页面信息。接着探讨 POST 请求,借助 http://httpbin.org/ 诠释其原理,并深度剖析百度登录页面抓包获取参数,运用字典传入数据构建 POST 请求,带您领略模拟登录背后的技术奥秘。

爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略

  • 1 Requests库的使用
    • 1.1 Requests库的安装
    • 1.2 GET请求
      • 1.2.1 最基本的GET请求
      • 1.2.2 GET请求中加入headers和参数
      • 1.2.3 encoding
    • 1.3 POST请求

1 Requests库的使用

1.1 Requests库的安装

可以使用pip或者conda安装requests库,我按装的版本是2.24.0,大家可以酌情安装,不一定非要跟我安装同一个版本,差别不是很大。

1.2 GET请求

GET请求就是访问一个页面的请求。用百度页面为例:

1.2.1 最基本的GET请求

在下面这段代码中,打开了百度页面,通过status_code输出状态码是200,证明我们已经完成了一次正常的对百度页面的GET请求

import requests
URL = "http://www.baidu.com/"
response_GET = requests.get(URL)
print(response_GET.status_code)

在这里插入图片描述

1.2.2 GET请求中加入headers和参数

headers中常加入user-agent,他是为了模拟一个正常用户的身份识别标识。该如何获取呢?打开百度,打开开发者工具,点击network或者网络,刷新。点击一个包并且查看具体信息中的user-agent:
在这里插入图片描述
复制下来,并且加入到代码中去:

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

在百度首页中搜索python,查看URL中的参数变化,说明wd代表着搜索:在这里插入图片描述
然后设置参数wd并且传入:

import requests
URL = "http://www.baidu.com/"
kw = {
    'wd':'python'
}
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
response_GET = requests.get(URL,headers = headers,params = kw)
print(response_GET.status_code)

该如何查看文章内容,涉及到了下一个知识点encoding

1.2.3 encoding

如果不设置encoding经常会出现乱码,该如何设置呢。在要访问的页面上右键查看网页源代码,找到如下部分:
在这里插入图片描述
这里就是爬虫访问的内容改用什么字符串编码解析。现在知道是utf-8了就可以进行设置。

import requests
URL = "http://www.baidu.com/"
kw = {
    'wd':'python'
}
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
response_GET = requests.get(URL,headers = headers,params = kw)
response_GET.encoding = 'utf-8'
print(response_GET.text)

在这里插入图片描述
可以看到已经能返回正常的中文文字了,但是发现好像跟要找的python没有关系,问题出在了:URL地址上需要加入/s ?
在这里插入图片描述

import requests
URL = "http://www.baidu.com/s?"
kw = {
    'wd':'python'
}
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
response_GET = requests.get(URL,headers = headers,params = kw)
response_GET.encoding = 'utf-8'
print(response_GET.text)

在这里插入图片描述
现在已经可以成功找到百度上跟python有关的页面了

1.3 POST请求

使用http://httpbin.org/ 的这个URL作为测试POST的案例:

import requests
URL = "http://httpbin.org/post"
data = {
    'wd':'python'
}
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
response_GET = requests.post(URL,headers = headers,data = data)
response_GET.encoding = 'utf-8'
print(response_GET.text)

在这里插入图片描述
通过这个例子说明网站的服务器已经接收到了我们的post请求。
下面打开百度登录页面,打开开发者工具,然后输入用户名和密码,可以发现抓包到post,可以通过从载荷中找到对应用户名密码的参数复制到自己的代码中进行登录:
在这里插入图片描述
但是这里属于是百度网站为了安全起见自动做了加密,你们可以换一个安全系数没这么高的小网站,他们的登录一般都可以直接抓包看到用户名和密码:
只要把post中的载荷的信息用字典的方式传入post我们可以用代码实现百度首页的登录(这只是个案例,这个代码跑不了,因为百度首页的登录信息是太多了,就这个字典我输了十分钟都没输全,你们可以换个不这么在乎用户安全的网站试试,我真的尽力了,我真想邦邦两拳给这个开发百度的程序猿,是太负责了。):

import requests
URL = "https://passport.baidu.com/v2/api/?login"
data = {
    'staticpage': 'https://www.baidu.com/cache/user/html/v3Jump.html',
    'charset': 'UTF-8',
    'token': 'ee1f6dfd3362bc566dfb86df3c61f257',
    'tpl': 'mn',
    'subpro': '',
    'apiver': 'v3',
    'tt': '1733105162149', 
    'safeflg': '0',
    'u': 'https://www.baidu.com/', 
    'detect': '1',
    'gid':'5C21134-1626-4E66-B2A6-8F4C41135DF4',
    'quick_user': '0',
    'logintype': 'dialogLogin',
    'logLoginType': 'pc_loginDialog',
    'loginmerge': 'true',
    'splogin':'rate',
    'username':'18232157902',
    'password': 'zw963807',
    'mem_pass': 'on',
    'isagree': 'on',
    'rsakey': 'HczHrxCxyc82AIEAqFp3xEvCh0pa3f1h',
    'crypttype': '12',
    'ppui_logintime':'850851',
    'login_version':'v5',
    'supportdv':'1',
    'bdint_sync_cookie':'''05WZvQdXKh0CD3c2VGLV1a2T6rYfzw9WOjE8/FjnpXIIII9dJ11wydWL4r7oyc/d5/RS7ZR+e19vp4DEUZmj/Lhqg6bLjxo5pNHE6DKChk+SLs/V+gwTDctKSZ23g4g5PQNte67+sAXaFUgCm5s1E3HULCl/agvHny3ta1cg1RYQ4DyYPcoAlDJfOunhSfurjL22qaEcMelPwKG3901pa9lRnzuuyaKdL2i0yWNO+P0g86LYvCw/WlqcKOohCFKzpLSHwue3aMkgI+oENX4rEWw/YAB3o6fL8oFByL8UigMM1ZRNCh1ruT5HL8xKSxQQxsB69TNEl+ruXJ/tWQOTKL8oEornBZPdz+cnr4NHi1jxUT0qSP7JWeuYT11GWvRPZhp+DByX6bh8+j/0dlTYIHae4HnQdM0SdJLlDeBUXLK2Tk23CUmF4AICunU+Ci/GvbFJ1LYtcK1bUV2zeBc6ukZ5Pd/r+0VjSAfFP49VkjxtQ72HNidd9HgkHupKeY9A36CXPqJBqrYIK7S3dqjGOSazvov/n0g07pPh6aVFGoJYbKlypXQHn0yLA0Sa3MZ0M4uiMDEdLQTvoZSO/yi4eBNv3UJYu1Ao2yapzPZUkTM6JSJSor+Gwxe7BjG8zDzy4osB+s5YPEiaI8YHCc2EZvT7wQbCmXm4BrvLxR3WS84/fJB3gv2xUbk37YbNAH3EisCHhO+PDjdK7VE1YNGIQPFxJsz0cWDZM3Zb3UWrNPt6tDbbQNTFLiWlaY9JO++zSfw9LNvQxxlMYEJTf5kk12LzXkKDOP5QKcAHU/36FkrVb7isQgKhREZr8OEQE0DI7ZUAVKF2BiQsyPGPbAXNhtBLAC4dugoDH/5ug3RWyj9jKQKZVEBsBg7yEwf88QOkz+2oW2zEfoSdBX8mVQZJSQdCG3AitFVGP5inR/rBHUP1Dmmo/kesz1R2mdCRYjiXjkR631fyRbdlJgAlXKVn4ShqzXnc68j1BEU8BBX82Nqu0VU10ic+mUjGzGf+YEV9QFZow4w8uG4vnVzGuFYaC9wuSn4V5h3GMH0syWCYUguok0FR9K+jWcfaV/7me5sTnvxTXNQgZSAkm8QvQLL6I1cE/mDcTAnHY0mba9oOIpe8c2DpJ1uk30oTpQPKZypnO6oJR2knwCIz93bieZlin5jAoNgG3t0w8sSZ+G5G3HpHxmyh/eUFG4LPnMLUZbAyw1O+Mb2Qwwk5GPAZ9MKSTr8czvrvbwH8XJuYH7hmI0wm49cbRVF2C36+paV0KrSW2Or6XNtke4N4Kw5Fs8uX+SeiaP6BZifkncOA7YZtcyE='''
}
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
response_GET = requests.post(URL,headers = headers,data = data)
response_GET.encoding = 'utf-8'
print(response_GET.text)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络:IP协议详细讲解

目录 前言 一、IP网段划分 二、IP报头 三、解决IP地址不足-->NAT技术 前言 在之前,我们学习了传输层中的TCP和UDP,重点是TCP协议,他帮我们解决具体到主机的哪个应用(端口)、传输的可靠(序列号、校验和…

Proteus8.17下载安装教程

Proteus是一款嵌入式系统仿真开发软件,实现了从原理图设计、单片机编程、系统仿真到PCB设计,真正实现了从概念到产品的完整设计,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,能够帮助用…

C++设计模式(装饰模式)

一、介绍 1.动机 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合&#xff0…

【VMware】Ubuntu 虚拟机硬盘扩容教程(Ubuntu 22.04)

引言 想装个 Anaconda,发现 Ubuntu 硬盘空间不足。 步骤 虚拟机关机 编辑虚拟机设置 扩展硬盘容量 虚拟机开机 安装 gparted sudo apt install gparted启动 gparted sudo gparted右键sda3,调整分区大小 新大小拉满 应用全部操作 调整完成

03-12、SpringCloud Alibaba第十二章,升级篇,服务注册与配置中心Nacos

SpringCloud Alibaba第十二章,升级篇,服务注册与配置中心Nacos 一、为什么SpringCloud Alibaba 1、为什么 有了spring cloud这个微服务的框架,为什么又要使用spring cloud alibaba这个框架了?最重要的原因在于spring cloud中的…

java网络通信(三):TCP通信、实现客户端-服务端消息通信

目录 1、什么是 TCP协议? 2、代码实现TCP协议的一发一收 2.1、客户端 2.2、服务端 2.3 结果演示 3、代码实现TCP协议的多发多收 3.1 客户端 3.2 服务端 3.3 结果演示 简介:本文章主要是演示如何用java代码以及TCP协议实现网络通信,实…

剖析go协程池实现原理

go协程池实现 在go语言编程中有一种池肯定避免不了,那就是-协程池,无论你是日常工作还是面试中面试官都无法避免协程池,掌握协程池你也就算是入门go的并发编程了,打一波广告后面会有专门的文章来介绍如何在go中进行并发编程。 协…

华为关键词覆盖应用市场ASO优化覆盖技巧

在我国的消费者群体当中,华为的品牌形象较高,且产品质量过硬,因此用户基数也大。与此同时,随着影响力的增大,华为不断向外扩张,也逐渐成为了海外市场的香饽饽。作为开发者和运营者,我们要认识到…

万能门店小程序管理系统 onepic_uploade 任意文件上传漏洞复现

0x01 产品简介 万能门店小程序管理系统是一款功能强大的工具,旨在为各行业商家提供线上线下融合的全方位解决方案。是一个集成了会员管理和会员营销两大核心功能的综合性平台。它支持多行业使用,通过后台一键切换版本,满足不同行业商家的个性化需求。该系统采用轻量后台,搭…

QT:信号和槽01

QT中什么是信号和槽 概念解释 在 Qt 中,信号(Signals)和槽(Slots)是一种用于对象间通信的机制。信号是对象发出的事件通知,而槽是接收并处理这些通知的函数。 例如,当用户点击一个按钮时&#…

SQL面试50题

数据表关系图 数据表 CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL,sex enum(female,male) NOT NULL,birth date NOT NULL,credit float(5,2) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT25 DEFAULT CHARSETutf8;…

下载maven 3.6.3并校验文件做md5或SHA512校验

一、下载Apache Maven 3.6.3 Apache Maven 3.6.3 官方下载链接: 二进制压缩包(推荐): ZIP格式: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zipTAR.GZ格式: https://archive.apache.org/dist/…

基于poi和javabean的excel读取

写在前面 示例写出时间&#xff1a;2024-12-02 这仅仅是excel读取的一个示例, 记录一下&#xff0c;这里也改了一下之前的导出&#xff0c;主要是为了兼容读取 之前的博客地址 基于poi和JavaBean的excel导出 poi依赖 <dependency><groupId>org.apache.poi</gr…

一键生成后端服务,MemFire Cloud重新定义开发效率

作为开发者&#xff0c;特别是独立开发者和小团队成员&#xff0c;大家都知道开发的最大难题之一就是搭建后端服务。要让一个应用从零开始&#xff0c;除了前端的开发工作外&#xff0c;还需要考虑数据库、接口、认证、存储等等一系列繁琐的后台工作。而MemFire Cloud这款神器&…

Maven、JAVAWeb、Servlet

知识点目标 1、MavenMaven是什么Maven项目的目录结构Maven的Pom文件Maven的命令Maven依赖管理Maven仓库JavaWeb项目 2.网络基础知识 3、ServletMaven Maven是什么 Maven是Java的项目管理工具&#xff0c;可以构建&#xff0c;打包&#xff0c;部署项目&#xff0c;还可以管理…

controller中的参数注解@Param @RequestParam和@RequestBody的不同

现在controller中有个方法&#xff1a;&#xff08;LoginUserRequest是一个用户类对象&#xff09; PostMapping("/test/phone")public Result validPhone(LoginUserRequest loginUserRequest) {return Result.success(loginUserRequest);}现在讨论Param("login…

Linux 内核系统架构

Linux 内核是一个复杂且高度模块化的系统&#xff0c;负责操作硬件资源、管理进程和内存、提供网络服务、执行文件系统操作、进行设备驱动程序的管理等。它为用户空间提供了一个抽象层&#xff0c;并为应用程序提供了底层服务。本文将深入探讨 Linux 内核的系统架构&#xff0c…

AI开发:逻辑回归 - 实战演练- 垃圾邮件的识别(二)

接上一篇AI开发&#xff1a;逻辑回归 - 实战演练- 垃圾邮件的识别&#xff08;一&#xff09; new_email 无论为什么文本&#xff0c;识别结果几乎都是垃圾邮件,因此我们需要对源码的逻辑进行梳理一下&#xff1a; 在代码中&#xff0c;new_email 无论赋值为何内容都被识别为…

WPF+MVVM案例实战与特效(三十)- 封装一个系统日志显示控件

文章目录 1、运行效果2、日志控件封装1、文件创建2、DisplayLogPanel.xaml 代码3、DisplayLogPanel.cs 代码4、数据模型5、枚举类型3、自定义控件使用1、LogPanelWindow.xaml2、LogPanelViewModel.cs4、总结1、运行效果 2、日志控件封装 1、文件创建 打开 Wpf_Examples ,在 …

VideoBooth: Diffusion-based Video Generation with Image Prompts

VideoBooth: Diffusion-based Video Generation with Image Prompts 概括 文章提出了一个视频生成模型VideoBooth&#xff0c;输入一张图片和一个文本提示词&#xff0c;即可输出保持图片中物体且符合文本提示词要求的视频。 方法 粗-细两阶段设计&#xff1a;1&#xff09;…