
不能否認, 它是相當出色的爬蟲框架, 其借用的是相似的辦法去爬取網頁, 即所爬取的是靜態頁面, 然而實際情形是, 多數網站均為動態的, 我們所見到的正常頁面皆是經瀏覽器渲染后的成果, 倘若徑直運用爬取網頁的方式, 極有可能無法獲取到預期的數據。一種看似理所當然的辦法, 便是借助自定義, 采用類似于這種模擬瀏覽器行為的途徑, 從而直接獲取到渲染好的html內容, 這般做無疑是行得通的, 而且也能夠較為輕易地實現對接, 其存在的欠缺之處在于, 會造成資源消耗的增加。另外存在一種能夠直接抵達本質的途徑, 那便是尋找到數據的起始源頭, 其中有的借助ajax請求去獲取數據源, 有的把數據源放置于js代碼里, 借助瀏覽器開發工具對交互過程予以分析, 當找到數據源頭后, 要是屬于ajax請求, 只要直接請求對應的接口便可以獲取到數據, 本文會對數據源在js文件中的提取方式進行介紹。舉個例子在此處, 是以某文庫的搜索結果當作例子的, 要是直接去進行頁面爬取, 那是無法看到下圖里的搜索結果的, 經過對頁面結構加以分析, 發現源頭數據處于腳本之中, 腳本里面大致上就是類似于json的數據對象, 只要獲取到js腳本的對象數據, 那就等同于得到了搜索結果。安裝能夠對js腳本予以解析, 進而獲取其中的數據對象, 在此推薦這個庫, 它可以直接把js里的數據對象返回, 極為便利, 在使用前需借助pip安裝此庫。要留意的是, 其核心代碼是用c編寫而成, 所以在安裝時要事先安裝c構建工具。1. 如果事先沒有安裝c構建工具會報錯2. 訪問上面錯誤提示中的鏈接下載c構建工具并安裝安裝成功之后再次執行pip 安裝成功shellShell能夠運用交互形式迅速驗證用于提取數據的代碼, 并非要一次次去運行爬蟲進行驗證, 極為高效, 接下來就要演示怎樣借助shell將js中的數據提取出來。啟動 shellscrapy shell https://wenku.baidu.com/search?wordpythonlm0od0frtop_homeieutf-8_wkts_1711155481643wkQuerypython根據返回的結果而言, 已然獲取到所爬取的頁面內容, 緊接著主要會以其進行數據提取。我們已然清楚數據源處于內里, 徑直運用.css()能夠獲取全部的, 我們所需求的是第二個當中的腳本。從中直接取出js腳本, 通過.css(::text)來進行獲取。最后就是導入庫執行js代碼并獲取返回的數據對象import chompjs data chompjs.parse_js_object(js_code)data屬于dict字典對象, 所需的數據處于‘’這個鍵當中, 到這里, 便成功完成啦。我來做個簡單總結, 我覺得運用寫爬蟲根本沒必要用到像這般的模擬瀏覽器下載器, 解決之道是尋找到數據的源頭, 沒有數據源的話動態網站也就沒辦法進行渲染了。然而, 此處遺漏了一個關鍵的環節, 那便是登錄, 不同的平臺登錄機制存在差異, 形形色色的驗證碼令人煩擾, 直接對抗極有可能撞得頭破血流, 所以我不提議將登錄部分編寫在爬蟲之中, 一種更為優良的方案是單獨去開發一個池服務, 池服務承擔著管理所有平臺用戶登錄的職責, 對于無法自動登錄的情況就提供手工登錄加以解決, 并且通過 web api 來提供隨機獲取的功能, 借助調用池的 api 來達成模擬已登錄用戶狀態的目的。