大家好,我是Python進階者。
一、前言
前幾天在Python鑽石交流群【夢】問了一個Python網路爬蟲的問題,這個網站不知道使用了什麼反爬手段,都獲取不到頁面資料。原來的那篇文章竟然爆文了,突破了1.5w的閱讀量,歡迎大家圍觀。
不過這裡粉絲的需求有點奇怪,他不需要JS載入後的資料頁面,而是需要JS的源網頁。昨天在群裡又討論起這個問題,這次一起來看看這個問題。
二、實現過程
這裡【瑜亮老師】指出非同步頁面中,標籤和資料都是不在頁面原始碼中的。你的這個頁面,資料在json,然後js拼裝後顯示在頁面中。如果你想要獲取你說的帶標籤的原始碼,可以使用自動化模組,例如:selenium(不建議用這個),playwright,drissionpage。
後來【提請問粘給圖截報錯貼代原始碼】給出了具體的原始碼:
from DrissionPage import WebPage
page = WebPage()
# 訪問網頁並渲染
page.get('https://fx.cmbchina.com/hq', timeout=300)
response = page.html
print(response)
page.quit()
開啟network,檢視這個網頁的渲染方式,你就知道這個網頁一開始是沒有內容的,全靠js在渲染。
你直接訪問這個連結就是沒有內容。
先渲染再獲取就有了,再者說,你的目的肯定是隻要這頁面上的表格,表格就是json,獲取json連結比獲取渲染後的網頁方便多了。可以不在頁面本身的,使用dom插入,現在的資料頁面基本都是這種方式,效率高且安全性好。
【貓藥師Kelly】也指出使用drissionpage,配合自帶的監聽或者mitmproxy,能搞定很多活。
順利地解決了粉絲的問題。
如果你也有類似這種Python相關的小問題,歡迎隨時來交流群學習交流哦,有問必答!
三、總結
大家好,我是Python進階者。這篇文章主要盤點了一個Python網路爬蟲網頁JS渲染源網頁原始碼獲取的問題,文中針對該問題,給出了具體的解析和程式碼實現,幫助粉絲順利解決了問題。
最後感謝粉絲【夢】提出的問題,感謝【論草莓如何成為凍幹莓】、【瑜亮老師】、【貓藥師Kelly】給出的思路,感謝【莫生氣】等人參與學習交流。
【提問補充】溫馨提示,大家在群裡提問的時候。可以注意下面幾點:如果涉及到大檔案資料,可以資料脫敏後,發點demo資料來(小檔案的意思),然後貼點程式碼(可以複製的那種),記得發報錯截圖(截全)。程式碼不多的話,直接發程式碼文字即可,程式碼超過50行這樣的話,發個.py檔案就行。