python 爬虫模拟登录
在使用 Python 编写爬虫时,模拟登录是一个非常常见的需求,尤其是当你需要爬取需要身份验证的数据时。模拟登录通常需要以下步骤:
- 分析登录页面:确定提交登录请求的 URL 和相关参数。
- 发送登录请求:模拟用户发送登录表单数据,获取登录后的会话。
- 维持会话状态:通常登录后的网站会通过 cookies 维持用户状态,你需要保持登录状态进行后续的爬取操作。
下面将通过一个实际示例详细介绍如何实现 Python 爬虫的模拟登录。
1. 准备工具
常用的 Python 库:
requests
:用于发送 HTTP 请求。BeautifulSoup
(可选):用于解析网页数据。
安装:
pip install requests beautifulsoup4
2. 分析登录页面
首先,你需要在浏览器中打开目标网站的登录页面,使用开发者工具(按 F12
)查看登录请求是如何发送的。
在 Network 选项卡中:
- 查找 登录请求 的 URL。
- 找到需要提交的表单字段(如用户名、密码等)。
- 确认是否需要发送其他隐藏字段,如
token
或CSRF
(跨站请求伪造)防护码。
3. 模拟登录步骤
3.1 获取登录页面
有些网站在登录时可能会要求 CSRF 令牌或其他隐藏字段,因此首先要获取登录页面,提取这些字段。
import requests
from bs4 import BeautifulSoup# 登录页面 URL
login_url = "https://example.com/login"# 创建一个会话对象
session = requests.Session()# 获取登录页面
response = session.get(login_url)
soup = BeautifulSoup(response.text, 'html.parser')# 假设页面中有一个隐藏的 CSRF 令牌
csrf_token = soup.find("input", {"name": "csrf_token"})['value']print(csrf_token) # 打印查看 CSRF 令牌
3.2 提交登录表单
登录表单通常需要提交用户名、密码和其他隐藏字段,如 CSRF 令牌。使用 requests
模拟 POST 请求提交表单。
# 登录请求 URL(通常是登录表单提交的地址)
post_url = "https://example.com/login"# 登录表单数据
login_data = {"username": "your_username", # 替换为实际用户名"password": "your_password", # 替换为实际密码"csrf_token": csrf_token # 提取到的 CSRF 令牌
}# 提交登录表单
response = session.post(post_url, data=login_data)# 判断是否登录成功
if "欢迎" in response.text: # 根据网页内容判断是否登录成功print("登录成功")
else:print("登录失败")
3.3 爬取登录后页面的数据
登录成功后,session
对象会保存 cookies,你可以使用同一个会话对象爬取登录后的页面。
# 需要登录后才能访问的页面
dashboard_url = "https://example.com/dashboard"# 使用已登录的会话对象请求数据
response = session.get(dashboard_url)# 输出登录后的页面内容
print(response.text)
3.4 请求头模拟(可选)
为了更好地模拟真实用户,有时你需要添加请求头,尤其是 User-Agent
,表示你的请求来自某个特定的浏览器。
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}# 带上请求头进行请求
response = session.get(dashboard_url, headers=headers)
print(response.text)
4. 实战案例:模拟登录 GitHub
我们以 GitHub 为例,演示如何模拟登录。注意:请务必遵守网站的爬虫政策。
4.1 获取登录页面和 CSRF 令牌
import requests
from bs4 import BeautifulSoup# GitHub 登录页面 URL
login_url = "https://github.com/login"# 创建会话对象
session = requests.Session()# 获取登录页面,提取 authenticity_token
response = session.get(login_url)
soup = BeautifulSoup(response.text, 'html.parser')# 提取 CSRF 令牌
authenticity_token = soup.find("input", {"name": "authenticity_token"})['value']print(authenticity_token)
4.2 提交登录表单
# GitHub 登录请求 URL
post_url = "https://github.com/session"# 填写登录表单数据
login_data = {"login": "your_github_username", # GitHub 用户名"password": "your_github_password", # GitHub 密码"authenticity_token": authenticity_token
}# 提交登录表单
response = session.post(post_url, data=login_data)# 判断是否登录成功(通过个人主页链接判断)
if response.url == "https://github.com/":print("登录成功")
else:print("登录失败")
4.3 访问登录后页面
# 访问登录后的 GitHub 个人主页
profile_url = "https://github.com/your_github_username"response = session.get(profile_url)
print(response.text) # 输出页面内容
5. 处理常见问题
5.1 处理验证码
有些网站登录时会有验证码,这使得模拟登录变得复杂。通常你有以下几种方法:
- 手动输入:在脚本运行时暂停,人工输入验证码。
- OCR(光学字符识别):使用
Tesseract
等库自动识别验证码图片(如果验证码不是太复杂)。 - 绕过验证码:通过分析网站接口,找到无验证码的登录方式(某些 API 不需要验证码)。
5.2 使用代理
如果目标网站对频繁的登录请求有限制(如 IP 封禁),可以使用代理池来发送请求。
proxies = {"http": "http://your_proxy","https": "https://your_proxy"
}# 使用代理发送请求
response = session.get(url, proxies=proxies)
5.3 处理动态加载内容
有些网站(如使用 AJAX 加载数据的页面)在登录后仍然使用 JavaScript 加载内容,requests
无法直接获取。这时可以考虑:
- 抓取 API:找到页面背后调用的接口,直接请求 API 获取数据。
- Selenium:使用 Selenium 模拟真实浏览器操作。
相关文章:

python 爬虫模拟登录
在使用 Python 编写爬虫时,模拟登录是一个非常常见的需求,尤其是当你需要爬取需要身份验证的数据时。模拟登录通常需要以下步骤: 分析登录页面:确定提交登录请求的 URL 和相关参数。发送登录请求:模拟用户发送登录表单…...

AOP基础、快速入门、进阶
一、概述 AOP:Aspect Oriented Programming(面向切面编程、面向方面编程),其实就是面向特定方法编程 那什么又是面向方法编程呢,为什么又需要面向方法编程呢?来我们举个例子做一个说明: 比如…...

哪款宠物空净运行吸毛好、噪音小?希喂、霍尼韦尔、安德迈测评!
作为宠物领域目前最火热的产品,宠物空气净化器的讨论度一直很高。身为铲屎官的我在产品刚出的时候就购入了一台,结果让我非常失望! 抛开产品效果不提,它运行起来的声音实在太大了!我家猫根本不愿意靠近,每…...

新兴的安全职业挑战
我们经常与安全专业人士交谈,他们希望在努力提升职业发展的同时提高自己的价值并克服组织内部的挑战。在这些谈话中,花费大量时间讨论公司未来将面临的安全问题并不罕见。 安全领导者希望为问题制定计划并获得领导层对其计划的支持。这通常意味着实施修…...

代码随想录算法训练营Day32 | 122.买卖股票的最佳时机Ⅱ、55.跳跃游戏、45.跳跃游戏Ⅱ、1005.K次取反后最大化的数组和
目录 122.买卖股票的最佳时机Ⅱ 55.跳跃游戏 45.跳跃游戏Ⅱ 1005.K次取反后最大化的数组和 122.买卖股票的最佳时机Ⅱ 题目 122. 买卖股票的最佳时机 II - 力扣(LeetCode) 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i…...

3D Slicer 教程一
先了解一下什么是3D Slicer,这个是做什么,然后一步步了解功能,一起看看源码 一.初识 这块软件用来处理医学影像,是一款开源的软件. 里面涉及到一些 2d 常见的操作,图像处理,调窗,测量; 涉及到3d的一些常见重建,mpr,vr,cpr等, 还包括一些分割,变换等(越高级精确的一些通过插件…...

github pages + hugo 搭建静态博客网站
体验地址 1. 起因, 目的: 其实6年前,我就写过这个。 项目代码 博客地址 最近想改写一下。 github 推荐的主题是 Jekyll, 我当时用的就是这个,感觉很麻烦。尤其是文章命名。 新的主题 hugo 用起来还行。 2.过程: 过程记录&am…...

Python爬虫如何爬取并解析JSON数据
前言 Python爬虫是一种用于从互联网上获取数据的程序,而JSON(JavaScript Object Notation)是一种常用的数据交换格式。本文将介绍如何使用Python爬虫来爬取并解析JSON数据,同时还会讲解如何使用代理IP来提高爬取效率。 1. 什么是…...

【C++】精妙的哈希算法
🚀个人主页:小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 一、哈希结构1、哈希概念2、哈希函数3、哈希冲突3.1 闭散列3.2 开散列 4、完整代码 一、哈希结构 1、哈希概念 A…...

智慧链动青春:国家区块链中心接待北京市十一学校青少年访学探索
以生动科学的方法点燃青少年科学探索欲望是构建未来科技人才梯队的基石。近期国家区块链技术创新中心接待北京市十一学校新生访学,以科普讲座、实操互动的方式让学生在深度思考中感受科学魅力、接触前沿科技,激发学生对区块链、隐私计算和芯片设计制造的…...

利用C++封装鼠标轨迹算法为DLL:游戏行为检测的利器
在现代软件开发中,鼠标轨迹模拟技术因其在自动化测试、游戏脚本编写等领域的广泛应用而备受青睐。本文将介绍如何使用C语言将鼠标轨迹算法封装为DLL(动态链接库),以便在多种编程环境中实现高效调用,同时探讨其在游戏行…...

Qt- QSS风格选择器常用属性选择器样式表盒子
1. 风格设置 Qt 提供了 3 种整体风格,使用 QStyleFactory::keys() 来获取 (windowsvista 、Windows 、Fusion) 可以在 main.cpp 中调用 setStyle 方法对应用程序进行全局风格的设置 int main(int argc, char *argv[]) {QApplication a(arg…...

粤智助自助一体机大厂浮出水面 OBOO鸥柏已成服务终端中坚力量
自助服务查询一体机作为操作自主化便民的重要窗口,OBOO鸥柏自助服务终端机以其显著的技术优化,通过触摸屏或其他交互界面,使用户能够自助服务完成各种操作,如支付、查询信息终端、办理业务,自助查档答应一体化等。为交…...

SpringBoot-application.properties配置
默认配置最终都是映射/关联到某个类 #SPRING CONFIG(ConfigFileApplicationListener) spring.config.name #配置文件名(默认 为 application ) spring.config.location #配置文件的位置 …...

STM32-ADC模数转换
一、概述 ADC(Analog-Digital Converter)模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间输入电压范围:0~3.3Vÿ…...

lspci | grep VGA
执行lspci | grep VGA后如下,解释含义 00:0f.0 VGA compatible controller: VMware SVGA II Adapter 0b:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3070] (rev a1) 执行 lspci | grep VGA 命令后,您得到了两条输出&#…...

智慧厂区车辆导航解决方案;智慧工厂电子地图应用解决方案;大型工厂内部导航解决方案;智慧工厂可视化地图应用方案
智慧厂区车辆导航解决方案;智慧工厂电子地图应用解决方案 在智慧工业的蓬勃发展背景下,上海懒图科技凭借其室内电子地图技术的深厚积淀,正为智慧工厂物流管理领域注入革新力量。其创新的车辆导航与可视化管理系统,凭借高精度定位…...

决策树C4.5算法详解及实现
C4.5决策树是一种广泛使用的机器学习算法,它用于分类任务。它是在ID3算法的基础上改进的,主要通过生成决策树来构建分类模型。C4.5通过以下步骤工作: 1. 数据集分裂 C4.5通过选择具有最高信息增益率的特征来分裂数据集。信息增益率…...

prompt learning
prompt learning 对于CLIP(如上图所示)而言,对其prompt构造的更改就是在zero shot应用到下游任务的时候对其输入的label text进行一定的更改,比如将“A photo of a{obj}”改为“[V1][V2]…[Vn][Class]”这样可学习的V1-Vn的token…...

适用于 Windows 11 的 5 大数据恢复软件 [免费和付费]
为什么我们需要Windows 11数据恢复软件? 计算机用户经常遇到的一件事就是数据丢失,这种情况随时可能发生。错误地删除重要文件和文件夹可能会非常令人担忧,但幸运的是,有一种方法可以恢复 PC 上丢失的数据。本文将向您展示可用于…...

vue实现获取当前时间并实时显示
以下代码可以实现获取当前时间并实时显示,朋友们直接copy使用即可,希望可以帮助到有需要的朋友们! <template><div class"time">{{ datetimeStr }}</div> </template> <script>export default {data…...
【论文阅读】SRCNN
学习资料 论文题目:Learning a Deep Convolutional Network for Image Super-Resolution(学习深度卷积网络用于图像超分辨率)论文地址:link.springer.com/content/pdf/10.1007/978-3-319-10593-2_13.pdf代码:作者提出的…...

数据结构与算法——Java实现 32.堆
目录 堆 大顶堆 威廉姆斯建堆算法 Floyd建堆算法 Floyd建堆算法复杂度 大顶堆代码实现 人的想法和感受是会随着时间的认知改变而改变, 原来你笃定不会变的事,也会在最后一刻变得释然 —— 24.10.10 堆 堆是基于二叉树实现的数据结构 大顶堆任意一个父节…...

深度学习 .dot()
在 MXNet 中,.dot() 是用于计算两个数组的点积(矩阵乘法)的方法。这个方法适用于一维和二维数组,并返回它们的点积结果。 语法 ndarray1.dot(ndarray2) 参数 ndarray1: 第一个输入数组。ndarray2: 第二个输入数组,…...

idea2024 git merge 时丢失 Merge remote-tracking branch问题
idea2024 git merge 时丢失 Merge remote-tracking branch问题 处理建议 直接修改本地git的配置 git config --global merge.ff false 分析 在 IntelliJ IDEA 中进行 Git merge 操作时,有时你可能会遇到提交历史中丢失 Merge remote-tracking branch 的信息&#…...

pdf怎么删除多余不想要的页面?删除pdf多余页面的多个方法
pdf怎么删除多余不想要的页面?在日常办公或学习中,我们经常会遇到需要处理PDF文件的情况。PDF文件因其格式稳定、不易被篡改的特点而广受青睐,但在编辑方面却相对不如Word等文档灵活。有时,在接收或创建的PDF文件中,可…...

树莓派应用--AI项目实战篇来啦-3.OpenCV 读取写入和显示图像
1. 介绍 在计算机视觉和图像处理领域,读取和显示图像是最基础且常见的操作之一,OpenCV作为一个强大的计算机视觉库,提供了丰富的功能来处理图像数据。 读取、显示和写入图像是图像处理和计算机视觉的基础,即使裁剪、调整大…...

一句话就把HTTPS工作原理讲明白了
号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 上午好,我的网工朋友。 在当今互联网高度发达的时代,信息安全已成为不容忽视的重要议题。 随着越来越多的个人信息和敏感…...

CPU 和处理核心(Core)中间有3个缓存
一、CPU 和处理核心(Core)的关系 CPU和处理核心之间的关系是整体与部分的关系。随着多核技术的发展,现代CPU通过包含多个处理核心来提高其并行处理能力和整体性能,同时在核心之间实现资源的有效共享和独立使用。这种架构的进步使…...

前后分离项目记录
一.前端设置 1.打包问题 打包报错 Thread Loader时,增加以下代码: 2.上线时api设置 二.Nginx问题 1.缓存问题:添加如下代码以禁止缓存,否则在关闭nginx后仍然可以访问页面 2.跨域问题在后端加CrossOrigin注解即可 3.上线时co…...