python爬取微信小程序(實戰篇)


python爬取微信小程序(實戰篇)

一、背景介紹

近期有需求需要抓取微信小程序中的數據分析,與一般的網頁爬蟲類似,主要目標是獲取主要的URL地址進行數據爬取,而問題的關鍵在於如何獲取移動端request請求后https加密的參數。本文從最初的抓包到獲取URL、解析參數、數據分析及入庫等,一步步進行微信小程序的數據爬取。

此次爬取的目標是微信小程序“財神股票”中的已受理科創版公司名單數據,如下:

注:抓包、分析、爬取等全過程幾乎通用於微信小程序,可以類似的爬取其他小程序測試,原理大同小異。

二、環境配置

具體的環境配置參考:Python爬取微信小程序(Charles)

移動端:iPhone;

PC端:Windows 10;

軟件:Charles

注:網絡要求較高,請確保網絡訪問無限制。

三、Charles抓包

Charles相關的配置與說明在此前的一篇文章( Python爬取微信小程序(Charles))中有詳細說明,此間不再贅述,強調一點就是移動端證書確保始終信任狀態

1. 設置移動端網絡代理;

2. 打開Charles,關閉Windows proxy;

3. 打開微信小程序,Charles提示如下說明正常連接:

4. 點擊微信小程序后,在Charles中顯示如下:

5. 為了避免過度鏈接干擾,點擊清除按鍵,清理后,點擊“科創版專題”,Charles抓取鏈接如下:

6. 點擊https://nujump.tigerobo.com,在右端contents中可以看到請求的詳細內容(為什么是這個鏈接而不是別的?我也是一個個點開嘗試的…)。

7. 在右側的overview中,可以看到URL的value:https://nujump.tigerobo.com/HB_Jumper/ztjump.ashx?topic=8&aris_data=kcb_1_announced_corp&pageIndex=1&pageSize=5

看到這個鏈接有木有很熟悉的感覺呢?Method對應的值是GET,也就是說此鏈接是通過GET方法進行獲取與展示數據,在主鏈接https://nujump.tigerobo.com/HB_Jumper/ztjump.ashx 后采用key與value拼接的方式發送請求,最后兩個參數pageIndex=1與pageSize=5,對應第一個頁面展示的5條數據,在Charles右側的contents中,下方選擇JSON Text,可以看到對應返回的response如下:

此處的 ”count”: 110 對應目前共有110條與科創版公司相關的數據。

8. 在拿到overview中的目標URL之后,直接修改pageSize的值為110,在瀏覽器中訪問鏈接:https://nujump.tigerobo.com/HB_Jumper/ztjump.ashx?topic=8&aris_data=kcb_1_announced_corp&pageIndex=1&pageSize=110 后顯示如下:

此數據即為小程序中展示的數據,也就是我們此次爬取的對象。

四、數據分析及入庫

拿到目標URL后,可以采用python的requests庫進行數據爬取:

詳情代碼此間不再贅述,完整代碼參考GitHub:GitHub

注:

  1. 數據清洗的過程中,剔除了港股股票;
  2. 通過爬取東方財富網獲取每家上市公司的股票代碼,詳情參考GitHub代碼;
  3. 上市公司與科創版公司的對應關系為多對多的關系,即一家上市公司可能對應多家科創版公司,一家科創版公司可能對應多家上市公司;
  4. 由於科創版公司目前暫無股票代碼等詳細信息,故數據的存儲方式采用上市公司對應科創板公司的方式存儲,具有一定的冗余;
  5. 由於目前所有的數據均存在變化(如新加科創版公司、上市公司又與新的科創版公司相關聯、科創版公司又與新的上市公司相關聯等),所以最好每次都清空之前的數據,不要只在之前數據的基礎上新增。

五、問題總結

1. 小程序內容加載緩慢或網絡異常:

         在測試時,發現Charles獲取一些財經類小程序(新聞聯播、財神行情等)均顯示正常,抓包等也無問題,但是對於一些電商小程序(京東購物、當當等),移動端有時候可能會顯示網頁打不開或無法加載,經測試發現與網絡關系較大,可能由於網絡本身的原因、移動端代理設置等問題導致。

六、參考鏈接

https://blog.csdn.net/HeyShHeyou/article/details/90045204


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM