以前提到動態加載就兩個解決方案——手動分析和selenium。接下來的文章咱們會來深刻探討它們,本文將首先,重點介紹前者——手動分析git
手動分析是一個比較有難度,比較麻煩的解決方案,但優勢也很明顯:速度快,又能培養咱們爬蟲的分析能力(重要)。若是連接有規律可循,建議能手動分析就手動分析,不能再上selenium(培養能力挺重要的不是麼?並且快的爬蟲誰不想要呢?)github
相信你們都有過這樣的經歷——進入一個網頁,鼠標處處點,滑輪上下滾,各類框框各類信息都蹦出來了,可是網頁連接沒變過,網頁也沒從新刷新過json
好比:逛網頁版的網易雲音樂的評論時,不管評論翻到第幾頁,網址也不會改變;逛知乎時,鼠標不停往下滾,只要下面還有回答,就會不斷的加載出來,一樣網址也不會改變;segmentfault的問答區也是segmentfault
相似這樣能不轉跳不刷新就能加載新信息的網頁,就是用了動態加載。背後有許多鮮爲人知的「交易」進行着,動態爬取的任務就是「攔截」它們11揭開它們的真面目。詳細請往下面看瀏覽器
首先記住——全部信息在理論上均可以經過請求(連接)得到
而後記住——有些請求須要提交參數,檢查headers什麼的來防爬
附加一點——大多數動態加載的信息,一般都是json數據服務器
有了這些指引提示咱們就能描繪出大概的分析思路post
完成以上四步一般就能得到目標json數據,剩下的就是分析json數據自己,把目標提取出來,方法上一篇文章講過。網站
繼續以某寶爲例吧,隨便搜一個商品進去,或者點我這個示例商品連接。打開F12,換到Network捉js的包,點到評論那裏,很快就彈出不少個包,逐個查看其response,很快就肯定了目標包,而後評論換頁,捉多幾個供連接分析用。
加密
這是一個包的請求連接
spa
經過對比剛纔捉到的多個包的連接,和屢次試驗性發送請求,咱們能夠分析出連接結構——ua(包括ua)以後參數是不影響請求結果的,currentPageNum是評論頁數,auctionNumId是商品id,userNumId能夠不要,這樣就足以構造全部json數據的請求連接,至於一些決定排序的參數這裏就再也不多分析,交給讀者。
屢次試驗後發現這個請求連接不須要提交數據,headers加個user-agent就能夠返回數據
可是taobao返回的json數據有坑,注意一下
而後提取json數據,這樣動態問題就解決了,能夠完整的寫出爬蟲。jd評價的爬取和淘寶相似,詳見github。
但連接亂到毫無規律可言,或者post參數加密到連媽都認不出來(而你也懶得或沒能力去分析其加密方法),再或者你上面四步走完折騰了一成天也的得不到信息時,是時候該放手了,機器是死的,人是活的,不必和服務器玩持久戰,加密防爬什麼都不是咱們寫的,破解不出來也是沒辦法的嘛
既然手動分析不行那隻能請selenium大佬上場了,這貨能模擬瀏覽器,能解決大部分動態網站。在爬蟲界有着「霸王硬上弓」的稱號,管它情不情願,dalao來了動態加載也只有屈服的份了。這個dalao以後會介紹
下一篇將是一個完整的動態爬取實例,順便接觸一下帶post參數的請求。