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

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

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

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

找到请求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 秒,不然频繁爬取会弹出登录界面导致拦截爬虫。

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

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海绵不是宝宝817

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值