小白尝试某程机票信息爬取

实训课需要机票数据集,网上没有,所以我选择爬取数据

此过程可谓经历的九九八十一难,也参考了不少大佬的文章,在此特别记录一下

弯路不多说,我直接讲成功的方法

找到请求url

通过控制台,最后确认下面的 url 的响应数据为机票信息

然后我们看一下请求头,发现需要 cookie 是固定的,sign ,token 和 transactionID 是算法计算得到的,下面的文章里有代码提到了 sign 和 transactionID 的处理,站内也有很多佬已经给出了答案,这里不过多叙述
吾爱破解网站的大佬发的文章

token 计算

最重要的是 token 的计算,通过搜索,发现赋值给它的是 i,打个断点调试,再通过堆栈分析,发现 i 的值就是 token

而 i 是由 window.signature 函数赋值的,所以定位这个函数

接下来我们确定一下是不是这个函数生成的 token,新建一个代码段,把上面函数的所有代码复制到该文件,再添加一段控制台输出,右键运行,发现控制台输出了类似的 token,所以就是这个函数计算出来的 token

把这段函数代码复制到代码编辑器,我这里用的 pycharm ,没有配置 node 的话记得配置一下

接下来有两种做法:

  1. 破解算法:就是断点写日志插桩,分析算法怎么来的,B站上有很多这样的教程,可以学习一下。我是小白,没做出来,而且这段函数代码足足 500 行,简直是出生!
  2. 补环境:就是模拟浏览器的环境,来跑上面的函数,因为浏览器能跑,而用 node 跑是不行的,因为缺少一系列环境。这个相对简单,所以下面介绍这种方法

补环境

接下来又有两种做法:

  1. 手动补:就是用代码编辑器跑这个函数,报啥错加啥,B站上有很多这样的教程,可以学习一下。我是小白,没做出来
  2. 工具补:这就不得不提到 V 神的插件 v_jstools ,github 上有源码下载下来,拖到谷歌浏览器里安装,记得打开浏览器开发者模式,不然无法安装。这个相对简单,所以下面介绍这种方法

按照如下勾选配置

再打开配置页面,把最下面所有的都勾上

然后清除缓存,将断点打在那个函数上,重新来调试一下,直到 加载出票价信息为止

期间只需要一直点下一步就可以

当某程票价信息加载出来后,退出调试,然后点击生成临时环境,就会自动复制到剪贴板

然后把这些环境代码粘贴到代码编辑器那个函数的上面,我这里生成了大概1700行的样子,里面有很多无用得完东西,咱们不管他,

直接运行补完后的代码,此时要是还报错,就把对应的错误行删除,完全没有影响!!!

再最后自己写个函数,方便 python 调用输出的 token

然后用 python 的 execjs 库运行 js 脚本,注意编码格式

with open('signture.js','r',encoding='utf-8') as f:js = f.read()
token = execjs.compile(js).call("getToken")

此时可能会报错,说 gbk 不能识别某个字符之类的,那就再加上下面的代码

import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")

然后把 token 传给请求头,就可以美美爬取代码啦(我的主体代码用的就是上面吾爱破解大佬给的代码,再此基础上传入自己浏览器的 cookie ,useragent 和 token 就行啦)

结语

原谅我无法给出源码,律师函警告捏。

建议爬取的时候设置随机 sleep 时间大于1 秒,不然频繁爬取会弹出登录界面导致拦截爬虫。

最后有什么问题可以私信我,我看到就会回复的,加油

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

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

相关文章

在WordPress中获取10天之内的文章更新数

要在WordPress中获取10天之内的文章更新数&#xff0c;您可以使用以下代码片段。这段代码将显示在过去10天内更新的文章数量。 <?php // 获取当前时间戳 $now time();// 计算10天前的时间戳 $ten_days_ago $now - (10 * 24 * 60 * 60);// 设置查询参数 $args array(pos…

【Spring Boot AOP中切入表达式格式介绍】

文章目录 一、切入表达式简介二、切入表达式的语法1. 方法匹配符示例&#xff1a; 2. 类型匹配符示例&#xff1a; 一、切入表达式简介 切入表达式&#xff08;Pointcut Expression&#xff09;是AOP中定义切入点&#xff08;Pointcut&#xff09;的一种方式。它定义了在哪些连…

基于Java中的SSM框架实现物流管理系统项目【项目源码+论文说明】

基于Java中的SSM框架实现物流管理系统演示 摘要 企业的发展离不开物流的运输&#xff0c;在一个大型的企业中&#xff0c;商品的生产和建设&#xff0c;推广只是前期的一些工作&#xff0c;在后期的商品销售和物流方面的建立&#xff0c;才能让一个企业得到大力的发展。 企业…

基于Linux/ARM/单片机利用状态机对多个按键进行扫描实现短按或者长按

1&#xff09;Linux/ARM/单片机入门级按键扫描程序设计&#xff0c;分享给将要学习或者正在学习Linux/ARM/单片机开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 学习Linux/ARM/单片机的同学…

docker部署简单的Kafka

文章目录 1. 拉取镜像2. 运行创建网络运行 ZooKeeper 容器运行 Kafka 容器 3. 简单的校验1. 检查容器状态2. 检查 ZooKeeper 日志3. 检查 Kafka 日志4. 使用 Kafka 命令行工具检查5. 创建和删除测试主题 1. 拉取镜像 选择一组兼容性好的版本。 docker pull bitnami/kafka:3.6…

Facebook:数字社交的引领者与创新者

自2004年诞生以来&#xff0c;Facebook从一个校园网络项目迅速成长为全球最大的社交媒体平台&#xff0c;彻底改变了我们与世界互动的方式。作为数字社交的引领者和创新者&#xff0c;Facebook不仅在技术层面上不断突破&#xff0c;也在社会和文化领域留下了深刻的印记。本文将…

vue2 + element三级菜单实现模板

需求&#xff1a; 需要一个含有三级菜单的结构模板&#xff0c;用于业务快速开发。 解决&#xff1a; sidebar.vue <template><el-menu :default-active"defaultActive" class"el-menu-vertical-demo" active-text-color"#ffd04b"&…

『大模型笔记』2024大模型AI工程师必备技能!

2024大模型AI工程师必备技能! 文章目录 一. 2024大模型AI工程师必备技能!1. 引言:理解如何在各种应用中使用大语言模型(LLM)2. 第1层:Question answering(Q&A)3. 第2层:Chatbot=Q&A+短期记忆(上下文知识)4. 第3层:RAG=Q&A+短期记忆(上下文知识)+长期记忆(外…

【论文解读】CVPR2024:DUSt3R: Geometric 3D Vision Made Easy

论文“”https://openaccess.thecvf.com/content/CVPR2024/papers/Wang_DUSt3R_Geometric_3D_Vision_Made_Easy_CVPR_2024_paper.pdf 代码&#xff1a;GitHub - naver/dust3r: DUSt3R: Geometric 3D Vision Made Easy DUSt3R是一种旨在简化几何3D视觉任务的新框架。作者着重于…

Docker的架构原理

例子可以想象成一个买手机的场景 clien可以想象 你个人 docker deamon &#xff1a;店员 images&#xff1a; 样机 regisitry&#xff1a; 手机仓库 container: 使用的手机 首先我要在店员买一个手机&#xff0c;店员发现是样机&#xff0c;但是仓库有&#xff0c;&…

【SpringBoot3】使用Jasypt加密数据库用户名、密码等敏感信息

一、使用步骤介绍 使用Jasypt&#xff08;Java Simplified Encryption&#xff09;进行数据加密和解密主要涉及几个步骤&#xff0c;包括引入依赖、配置加密密码、加密敏感信息、将加密信息存储到配置文件中&#xff0c;以及应用程序启动时自动解密。以下是详细的使用说明&…

11 docker安装redis

目录 安装redis 1. 配置redis配置文件redis.conf 1.1. 找到redis.conf文件 1.2. 配置文件 2. 启动容器 3. 测试redis-cli连接 4. 证明docker使用的是指定的配置文件 安装redis 1. 配置redis配置文件redis.conf 1.1. 找到redis.conf文件 宿主机创建目录/app/redis在/a…

WebXR:Web上的虚拟与增强现实技术

WebXR 是一种允许在网页上创建虚拟现实 (VR) 和增强现实 (AR) 体验的技术标准&#xff0c;它结合了WebVR和WebAR的概念&#xff0c;为开发者提供了一个统一的平台来开发跨平台的沉浸式Web应用。 WebXR 概述 什么是WebXR&#xff1f; WebXR API 旨在让浏览器成为VR和AR内容的平…

双非怎么进大厂?

https://www.nowcoder.com/share/jump/2764630231719583704126 大家好&#xff0c;我是白露啊。 今天我们要分享一个非常励志的故事&#xff0c;它证明了双非背景的毕业生也可以通过努力和坚持&#xff0c;进入梦想中的大厂。 下面是这位网友的真实经历&#xff0c;希望能为正…

泰安再见,泰山OFFICE还会再见

路过泰安&#xff0c;遇见彩虹。怀念和感恩在泰山信息科技的万丈豪情。 泰山OFFICE&#xff0c;还是要复活。

JavaScript Set新增7个方法操作集合

intersection() intersection () 它返回一个包含此集合和给定集合中所有元素的新集合。 const odds new Set([1, 3, 5, 7, 9]);const squares new Set([1, 4, 9]);console.log(odds.intersection(squares)); // Set(2) { 1, 9 }union() union () 它返回一个包含此集合中所有元…

提升Android Studio开发体验:使用Kelp插件实现颜色和图标预览

提升Android Studio开发体验&#xff1a;使用Kelp插件实现颜色和图标预览 在Android开发中&#xff0c;自动补全功能对于提高开发效率至关重要。然而&#xff0c;默认的Android Studio并不能预览颜色和图标&#xff0c;这使得开发者在选择资源时常常感到困惑。本文将介绍如何使…

【C语言小知识】备选拼写:iso646.h头文件

备选拼写&#xff1a;iso646.h头文件 C语言中有3种逻辑运算符&#xff1a; 逻辑运算符含义&&与||或!非 假设exp1和exp2是俩个简单的关系表达式&#xff0c;那么 当且仅当exp1和exp2都为真时&#xff0c;exp1 && exp2才为真。如果exp1或exp2为真&#xff0c;…

【学习笔记】Fréchet距离的 C 语言实现

Frchet 距离 Frchet 距离&#xff0c;又称为弗雷歇距离&#xff0c;是一种衡量两条曲线&#xff08;或两个路径&#xff09;之间相似性的度量方法。这个概念最初在度量空间理论中被定义&#xff0c;后来被广泛应用于计算机科学、地理信息系统、图像处理、生物信息学等多个领域…

使用Python实现深度学习模型:迁移学习与领域自适应教程

引言 迁移学习和领域自适应是深度学习中的两个重要概念。迁移学习旨在将已在某个任务上训练好的模型应用于新的任务&#xff0c;而领域自适应则是调整模型以适应不同的数据分布。本文将通过一个详细的教程&#xff0c;介绍如何使用Python实现迁移学习和领域自适应。 环境准备…