1. 程式人生 > >Python爬取異步加載的網站selenium+PhantomJS

Python爬取異步加載的網站selenium+PhantomJS

ron .com .html scrip psu 語言 sel 文字 get

一個網站的爬蟲腳本,在調試的時候發現問題:

腳本跑:content-type用text/xml 可以post成功,但post中body的內容沒有生效,所有的響應都是當前日期;用application,post不成功(即沒有返回數據)
工具發:content-type用text/xml 可以post成功,但post中body的內容沒有生效,所有的響應都是當前日期;用application,post成功且body中日期修改有效

即用腳本根本就沒有收到返回的數據,但是用工具fiddler或者Burpsuite都可以正常的使用查看包的內容,很奇怪。直到後來才發現,原來我爬的這個網站是動態的==

動態網頁(參考百度百科:https://baike.baidu.com/item/%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5/6327050)

-------------------------------------------------------------------- 所謂的動態網頁,是指跟靜態網頁相對的一種網頁編程技術。靜態網頁,隨著html代碼的生成,頁面的內容和顯示效果就基本上不會發生變化了——除非你修改頁面代碼。而動態網頁則不然,頁面代碼雖然沒有變,但是顯示的內容卻是可以隨著時間、環境或者數據庫操作的結果而發生改變的。 值得強調的是,不要將動態網頁和頁面內容是否有動感混為一談。這裏說的動態網頁,與網頁上的各種動畫、滾動字幕等視覺上的動態效果沒有直接關系,動態網頁也可以是純文字內容的,也可以是包含各種動畫的內容,這些只是網頁具體內容的表現形式,無論網頁是否具有動態效果,只要是采用了動態網站技術生成的網頁都可以稱為動態網頁。 總之,動態網頁是基本的html語法規範與Java、VB、VC等高級程序設計語言、數據庫編程等多種技術的融合,以期實現對網站內容和風格的高效、動態和交互式的管理。因此,從這個意義上來講,凡是結合了HTML以外的高級程序設計語言和數據庫技術進行的網頁編程技術生成的網頁都是動態網頁。 -------------------------------------------------------------------- 也可以解釋為,動態網頁沒有執行javascript,僅僅使用data = response.read()得到的靜態html是沒有所想爬取內容
在網上查到用Python 解決這個問題只有兩種途徑:直接從JavaScript 代碼裏采集內容,或者用Python 的第三方庫運行JavaScript,直接采集你在瀏覽器裏看到的頁面。曾經用selenium做過web自動化,就用第二種(其實selenium+PhantomJS就是模擬瀏覽器訪問url,然後將動態網頁所有內容轉化為靜態html返回,這樣速度會很慢) 安裝PhantomJS :第三方庫下載並放到python\scripts下 爬蟲網易歌單中,播放量超過1000萬的歌曲名及鏈接,保存至excel Chrome 按F12查看網頁源代碼 技術分享圖片

頁面查元素,先切換frame到id=‘g_iframe‘

播放量nb及對應的標題和鏈接

技術分享圖片

技術分享圖片

技術分享圖片

mysongList1000.xls結果截圖

技術分享圖片

靈感來源:http://www.cnblogs.com/tuohai666/p/8718107.html

Python爬取異步加載的網站selenium+PhantomJS