小白嘗試某程機票信息爬取

實訓課需要機票數據集,網上沒有,所以我選擇爬取數據

此過程可謂經歷的九九八十一難,也參考了不少大佬的文章,在此特別記錄一下

彎路不多說,我直接講成功的方法

找到請求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.pswp.cn/diannao/40319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40319.shtml
英文地址,請注明出處:http://en.pswp.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實現遷移學習和領域自適應。 環境準備…