python3網路爬蟲開發實戰_Python3 爬蟲實戰
背景


媳婦說考試這個題庫不方便作弊無法查詢,需要把題庫全部弄下來,然後可檢索。。
過程
想辦法檢視網頁原始碼

PC微信很快就開啟了網頁。思考如此,直接谷歌瀏覽器開啟網頁即可··然後在瀏覽器直接檢視網頁原始碼,看network。。

現實狠狠的打了一記耳光。
無奈只能抓包。。
WireShark的邂逅
網上查詢抓包軟體,大名鼎鼎的WireShark 映入眼簾,下載安裝WireShark,過程很順利。激動萬分開啟WireShark,複雜的介面,操作不知所措。。

這麼多網路連線,不知所措,大膽猜測,估計是得挑個我上網的網路卡名稱。一陣猛烈猜測過後盡然每個網路卡上都有資料

點了個WLAN,只有這個是物理無限網路卡連線著的,應該不會錯。。
點選進入後:

不停的刷,這個似乎無法分析問題,得去檢視如何寫過濾器,本次要過濾的是http協議。經過百度,查到一篇http協議寶典https://blog.csdn.net/zzy0609/article/details/95455136


瞬間少了很多無用的資料包。。。然後再次從微信瀏覽器裡面發起,請求,精準得到ip地址,然後再在過濾器上加入伺服器ip。

很精準的得到過濾請求。經過此過濾,竟然只能看到http的 reques 無法看到response,這WireShark著實頭大啊,再次求助度娘。。
https://blog.csdn.net/boling_cavalry/article/details/82925463
縱觀抓包PostMan驗證分析結論
很好,此類微信公眾號中的頁面,基本都已捨棄jsp,前後分離了,兩個介面歷歷在目,直接過濾在了Wire Shark上。 一個目錄介面,顯示目錄和章節,還有個題目詳情介面。
返回格式如下:


介面1:
http://www.y1da.com/v2/edu/chapterlist?uopid=ox705w3ahlEKvMXNq0w8qaZgb_BU&start=0&limit=150&ebid=401&token=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1MDMxMzMzMDA2NTAwODY0In0.hnKUbEs6Zp_etp6dbTSJp5HPHAlOq7gCOLKcekm65MfMA5fI_WTTlYRdOq0nf2xypyCGUA4T38zE8tIkfggEPQ
驗證估計在url上,不需要加任何http頭,直接可訪問。
介面2:
http://www.y1da.com/publicApi/edu/getQuestion?partNo=000079001001&pageSize=0&questionNo=000079001001000005
url引數上很容易看到同第一個列表上返回回來的引數溫和,partNo為章節,questionNo為遞增題目編號,但是看著似乎有點眉目,凡是還需要驗證,同時為程式碼做準備。
下一步 postman驗證 如何構造介面2請求。
WireShark中把所有請求頭都貼到請求頭中去。

如此一大串,全部貼入postman中測試

當全加上的時候,竟然請求不到資料,然後嘗試去掉部分,當把cookie去掉的時候,直接能夠返回資料了,然後開始減少到最少,最終留下Authorization,Host。
經過幾次測試發現構造第二個請求以下規律
http://www.y1da.com/publicApi/edu/getQuestion?partNo=000079001001&pageSize=0&questionNo=
第一次questionNo不給值,返回第一條,然後再返回的結果中,直接採用nextQuestionNo,總數為第一個介面裡面返回的total。至此完事具備,只待碼程式碼。
思考採用何種語言
日常開發過程中,採用了最多的為C++,JS,這兩種語言,C++雖然所有工具類都具備,總覺得用來抓包遭嫌棄,寫的雖然很快,但是到除錯的時候,可能讓我崩潰。 JS,這個語言要寫,還得要用nodejs,還要加檔案模組,還要弄代理服務解決跨域問題,麻煩。。 然後剩下C#,Java,這語言雖然好,便捷方便,但是也覺得還是得編譯執行。想到了Python了,這個曾經曾經曾經看過,寫過點例子的語言,現在都不知道發展到python幾版本了,但是這個確實用來寫爬蟲的最快語言,沒得挑了。。
隨便找個python3版本,安裝配好環境變數,開啟vscode,直接擼··
第一步求助度娘,找到python3 http client 示例

https://blog.csdn.net/sinat_29173167/article/details/80891129
直接拷貝成我的fuck.py檔案,新增一個testFuck方法修改拷貝getDemo方法。
按照示例,直接敲入http頭,以及第一個請求地址。
網路請求返回編碼問題

額,遇到了第一個問題,這個不是gbk估計就是utf-8了,也沒啥好問度孃的,直接嘗試修改為utf-8。果不其然,成功列印了。
Json字串python物件問題
首戰告捷,下一步,解析返回內容,現在轉成了字串,需要把字串轉成python3中字典物件,百度python中採用什麼方法轉換字典
https://www.cnblogs.com/fuyuteng/p/12060768.html

eval,嘗試下

額,無盡的思考,難道python的字典沒有true和false··· 對於python著實不熟悉,發起靈魂拷問,難道python中json和字典不是一回事?直接百度 python3 json false 關鍵字,得到以下文章:
https://blog.csdn.net/kongsuhongbaby/article/details/84729547
經過幾秒瀏覽,習得json.loads 大法

立馬嘗試修改程式碼:

成功輸出。。
python3 基本語法學習
陣列遍歷寫法, 簡單的for(int i=0;i<10;i++) python中寫法。。
https://blog.csdn.net/weixin_40943549/article/details/82949393
請求返回異常問題考慮
Python try catch 異常模組,由於當前採用的為我微信的認證,所以訪問到第六個問題的時候,直接回返回code 4010,讓後購買章節。所以遇到此類異常,需要跳出訪問。 異常模組經過度娘習得:
https://www.cnblogs.com/Lival/p/6203111.html

請求報錯遠端伺服器主動關閉連線
經過多次請求後,返回遠端伺服器主動關閉錯誤,經過思考,http為短連結,conn = http.client.HTTPConnection("www.y1da.com", timeout=10)後一直使用 conn,http頭中,未加入keep-alive 標識,修改程式碼。

執行,成功讀到五個問題,返回告訴我需要購買章節,異常捕獲。
PC微信重新登陸媳婦微信
登陸媳婦微信,重新抓包,檢視授權字串。發現坑爹驚天微信大bug,我登入我媳婦微信後,還是無法檢視其他章節,發現授權碼還是我之前的,這是什麼逆天bug。無奈,百般重試,依舊如此。然後查詢微信任何刪除快取,清空快取的功能,未果。。最終無奈,解除安裝重灌,搞定。。
最後寫入檔案
查詢python3寫檔案方法。
https://www.cnblogs.com/yunlong-study/p/9592926.html
修改程式碼如下:

暗中竊喜,大功告成,執行。帥不過十秒···

這個錯誤,乍一看還是和編碼相關,思考半天,最後就新增了檔案寫入,檔案寫入採用windows預設編碼,windows預設編碼為gbk,似乎這邊沒錯,這錯誤好像是gbk特殊字元無法編碼,我瞅瞅是什麼特殊字元,似乎就是這個Fe²⁺ 搗鬼。那檔案開啟理論上是應該能指定編碼,換成萬能utf-8應該就沒問題。繼續度娘,關鍵字,python3 寫檔案 指定編碼,
https://www.cnblogs.com/lmygbl/p/10121909.html,修改程式碼。

至此檔案成功輸出···
成果


相關文章
- 《Python3網路爬蟲開發實戰》教程||爬蟲教程Python爬蟲
- Python3網路爬蟲開發實戰Python爬蟲
- [Python3網路爬蟲開發實戰] 分散式爬蟲原理Python爬蟲分散式
- 《python3網路爬蟲開發實戰》--pyspiderPython爬蟲IDE
- python3網路爬蟲開發實戰pdfPython爬蟲
- python3網路爬蟲開發實戰_Python 3開發網路爬蟲(一)Python爬蟲
- 《Python3網路爬蟲開發實戰》開源啦!Python爬蟲
- [Python3網路爬蟲開發實戰] Charles 的使用Python爬蟲
- [Python3網路爬蟲開發實戰] --Splash的使用Python爬蟲
- 《Python3 網路爬蟲開發實戰》—學習筆記Python爬蟲筆記
- Python3網路爬蟲開發實戰(第二版)Python爬蟲
- 面前最全《崔慶才python3網路爬蟲開發實戰》Python爬蟲
- python3 網路爬蟲開發實戰 貓眼top100Python爬蟲
- 《Python3網路爬蟲開發實戰程式碼》基本庫使用Python爬蟲
- 讀書筆記:《Python3網路爬蟲開發實戰》——第2章:爬蟲基礎筆記Python爬蟲
- 我的爬蟲入門書 —— 《Python3網路爬蟲開發實戰(第二版)》爬蟲Python
- Python3網路爬蟲快速入門實戰解析Python爬蟲
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 2-網頁基礎Python爬蟲網頁
- python3 爬蟲實戰:為爬蟲新增 GUI 影象介面Python爬蟲GUI
- 網路爬蟲——爬蟲實戰(一)爬蟲
- Python3網路爬蟲開發實戰——第1章 開發環境Python爬蟲開發環境
- 《Python3網路爬蟲開發實戰》抽獎贈書活動Python爬蟲
- python3網路爬蟲開發實戰【高清掃描帶目錄】Python爬蟲
- 【閱讀筆記】《Python3網路爬蟲開發實戰》PDF文件筆記Python爬蟲
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 1-HTTP基本原理Python爬蟲HTTP
- Python3網路爬蟲開發實戰——第3章 基本庫的使用Python爬蟲
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 5-代理的基本原理Python爬蟲
- Python 3網路爬蟲開發實戰Python爬蟲
- 【Python3網路爬蟲開發實戰】3.4-抓取貓眼電影排行Python爬蟲
- python3網路爬蟲開發實戰-線上版-可複製貼上Python爬蟲
- 2019最新崔慶才python3網路爬蟲開發專案實戰(完整)Python爬蟲
- python3網路爬蟲開發實戰(配置踩坑及學習備忘)Python爬蟲
- 《Python3網路爬蟲開發實戰(第二版)》內容介紹Python爬蟲
- Python網路爬蟲實戰Python爬蟲
- 《Python3網路爬蟲開發實戰》PDF+原始碼+《精通Python爬蟲框架Scrapy》中英文PDF原始碼...Python爬蟲原始碼框架
- 【Python3網路爬蟲開發實戰】4-解析庫的使用-1 使用XPathPython爬蟲
- 【Python3網路爬蟲開發實戰】4-解析庫的使用-3 使用pyqueryPython爬蟲
- 《Python3網路爬蟲開發實戰(第二版)》今天正式上市了!!!!Python爬蟲