使用Python+requests简单实现模拟登录以及抓取接口数据

2023-05-16

前言:说起爬虫这个东西,大学时我习惯用PHP+CURL来实现,后来用Java+WebMagic来实现。如今刚接触一下Python,开始了解一下Python的语法和框架等,以及用Python来做一些HTTP请求,发现在功能实现上,相比PHP和Java,其更加方便、简洁、高效。

本例子的服务端是基于Session来和客户端保持会话连接的,也就是说每个客户端首次访问服务端时,服务端都会为其开启一个Session,只要客户端的Cookie信息不被用户清空,或者服务端重启,又或者此Session保持长时间有效,之后的访问,多少次都是同一个Session,并存于服务器内存中。

下面就以Python的requests依赖库来实现一个客户端模拟登录。

环境:

Python => 3.11.2
urllib3 => 1.26.15

index.py

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
import json
import urllib3

urllib3.disable_warnings()  # InsecureRequestWarning: Unverified HTTPS request is being made to host 'xxx'. Adding certificate verification is strongly advised.

# 实例化 session 对象
session = requests.session()

# 打印前后的请求标头
headers = {
    "Content-Type": 'application/json',
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"
}
print('原 session 的请求标头' + str(session.headers))
session.headers = headers
print('新 session 的请求标头' + str(session.headers))

# 更新为使用账号密码登录成功的 session 对象
url = 'https://xxx.com/api/login'  # 登录接口
data = {
    'username': '',
    'password': ''
}
response = session.post(url, data=json.dumps(data), headers=headers, verify=False)

if response.status_code == 200:
    print('尊敬的用户,' + '您已模拟登录 成功~')
    print(response.text)
    print(response.cookies)
else:
    print('模拟登录 失败!')
print('\n')

# 爬取 getUserList 接口数据
userListUrl = 'https://xxx.com/api/getUserList'  # 目标接口
response = session.get(userListUrl, headers=headers, cookies={}, verify=False)

if response.status_code == 200:
    print('爬取接口 成功~')
    print(response.text)
else:
    print('爬取接口 失败!')

效果:

D:\Python3.11\python.exe D:\workspace\python3_django4_web\python3_django4_web\simulated_client\index.py 

原 session 的请求标头{'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
新 session 的请求标头{'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'}

尊敬的XXX用户,您已模拟登录 成功~
{"success":true,"statusCode":200,"data":"..."}
<RequestsCookieJar[...]>


爬取接口 成功~
{"success":true,"statusCode":200,"data": [...]}

Process finished with exit code 0

参考资料:

JSESSIONID的简单说明_hzm326的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Python+requests简单实现模拟登录以及抓取接口数据 的相关文章

  • Unity用UGUI实现省份选择

    参考 Unity3D中使用UGUI实现省市选择器 YOLO TO GAME的博客 CSDN博客
  • Unity3D中Resources动态加载图片

    问题 xff1a unity的Resources动态加载就不必多说了 xff0c 这里出现的问题是当我把图片放入Resources文件夹后 xff0c 使用Resources Load xff08 datapath xff09 却并没有出现
  • Navicat报错:1045-Access denied for user root@localhost(using password:YES)

    解决 xff1a Navicat报错 xff1a 1045 Access denied for user root 64 localhost using password YES SET PASSWORD FOR 39 root 39 64
  • UE4添加音乐、音效

    目录 一 目的 xff1a 1 想 xff1a UE4添加音乐 音效 二 参考 1 三 操作 xff1a 完成 1 前述 xff1a 1 导入音乐 1 创建Cue 1 Cue进行设置 1 创建音乐 1 播放和暂停音乐 一 目的 xff1a
  • 《嵌入式C语言自我修养》书评

    首先 xff0c 介绍本书的内容 笔者从嵌入式工程师的视角出发 xff0c 先为我们初学者补上硬件相关基础 xff0c 如计算机工作原理和系统结构 xff08 理解程序编译 链接 安装和运行机制 xff09 CPU的工作原理 xff08 理
  • SLAM14讲之第五讲--像素坐标系、畸变、双目相机深度求解

    像素坐标系 由相似三角形的定义可得 xff1a 这是相对于成像平面的坐标变化 xff0c 我们实际上所得到的图片还要经历一层成像平面到像素平面的变换 xff0c 实际上就是相差了一个缩放和原点的平移 如此我们定义 xff1a u为横轴向右与
  • python webkit 异步抓取页面数据

    usr bin python from ghost import Ghost class FetcherCartoon def getCartoonUrl self url if url is None return false todo
  • 树莓派 Ubuntu mate 16.04使用VNC开启远程桌面

    1 安装 vncserver sudo apt span class token operator span get span class token operator span y install vnc4server 2 启动 vncs
  • 数学建模(四)-----最优化问题-----Simulate Anneal Arithmetic

    模拟退火算法的应用很广泛 xff0c 可以较高的效率求解最大截问题 Max Cut Problem 0 1背包问题 Zero One Knapsack Problem 图着色问题 Graph Colouring Problem 调度问题 S
  • 路径规划的优化

    因为这个求N个点的最短路径是将把所有可能的走法都可能尝试一遍 这样的话 如果计算十几个点之间的最短路径是没有问题的 但是问题就在如果超过二十个点位 那么最坏的情况就是需要计算20的阶乘个 这个计算是相当高的 可能会把线上的服务器打爆 或者计
  • SPL06电容式压力传感器数据读取与处理(基于STM32)

    该例程使用的开发板为正点原子的精英板F103 xff0c 相关资料请大家自行去正点原子论坛下载 首先来看一下SPL06的简介 xff0c SPL06的压强测量范围30kPa 110kPa xff0c 最大供电电压为3 6V xff0c 相对
  • 企业微信开发实战(六、自建应用-审批流程引擎之配置可信任域名、创建审批模版、发起审批)

    文章目录 4 自建应用审批状态变化通知回调4 1概述4 2代码实战 5 查询自建应用审批单当前状态5 1概述5 2代码实战 源码赞赏 4 自建应用审批状态变化通知回调 4 1概述 1 企业可以在管理后台 自建应用 设置API接收中 xff0
  • FreeRTOS内存管理之heap_4.c

    FreeRTOS内存管理之heap 4 c源码解析 每当创建任务 队列 互斥量 软件定时器 信号量或事件组时 xff0c RTOS内核会为它们分配RAM 标准函数库中的malloc 和free 函数有些时候能够用于完成这个任务 xff0c
  • git图形化管理工具

    一 独立客户端工具 1 GitHub for Desktop 全球开发人员交友俱乐部提供的强大工具 xff0c 功能完善 xff0c 使用方便 对于使用GitHub的开发人员来说是非常便捷的工具 界面干净 xff0c 用起来非常顺手 xff
  • ROS功能包

    ROS package介绍 package是什么呢 xff1f 指的是一种特定的文件结构和文件夹组合 通常将实现同一个具体功能的程序代码放到一个package中 xff0c 比如实现相机数据采集这一功能 文件结构 CMakeLists tx
  • 坐标转换tf

    tf介绍 坐标转换 TransForm 位置和姿态 坐标变换是空间实体的位置描述 xff0c 是从一种坐标系统变换到另一种坐标系统的过程 通过建立两个坐标系统之间一一对应关系来实现下图为机器人几个部件之间的坐标关系 tf概念 tf是一个用户
  • 经典Windows编程书单

    说好的这次写一个图形编程书单 但是看起来不是很好整理 xff0c 这类书散落的家里到处都是 先把经典Windows编程的书整理一下吧 xff0c 不过Windows的也到处都是很多都找不到了 xff0c 只能把找到的拍个照 xff0c 可能
  • vscode设置C++代码格式化(Clang-Format)

    vscode中只要安装了C C 43 43 扩展后 xff0c 在C C 43 43 源文件中右键就能看到格式化文档的选项 xff0c 这样就能通过该选项或者其快捷键 xff08 Shift 43 Alt 43 F xff09 来实现快速格
  • git pull覆盖了本地未push的代码解决方案

    一 问题背景 情况 xff1a 本地代码写完后 xff0c git push上去github xff0c 然后报错 xff0c 提示要先git pull pull之后 xff0c 失败了或者覆盖了本地未push的代码 二 解决方案 2 1
  • FreeRTOS任务调度原理

    1 FreeRTOS的列表和列表项 列表和列表项是FreeRTOS中一个非常重要的数据结构 xff0c 是FreeRTOS的基石 要想看懂FreeRTOS的源码并学习其中的原理 xff0c 我们必须先了解一下这个数据结构 这个数据结构也是和

随机推荐