一步步教你打造微信公眾號文章爬蟲(1)-綜述

一步步教你打造微信公眾號文章爬蟲(1)-綜述

本系列我將與大家一起學習批量下載任意公眾號所有歷史文章。

爭取講明白,源代碼也會隨著教程逐步放出來,但是不喜歡伸手黨和不過如此黨(凡事都說雖然我不會但我覺得不難的人)。

用戶需要有一定的基礎:

  1. 知道百度這個神奇的網站,而且知道是免費的。
  2. 遇到問題先自行嘗試解決,不要張口就問。
  3. 有html基礎(可去 http://www.runoob.com 學習)。
  4. 有python基礎,會用pip安裝第三方庫(強烈建議新手去http://www.liaoxuefeng.com 看免費版教程,裡面也包含了如何在電腦上安裝配置python)
  5. 會用chrome的開發者工具。

會了第1、2條,則第3、4條應該可以搞定。第5條在本文會講到基礎用法。

先請由本人扮演的政委講兩句:

先說點成果給大家點信心:本人2年前就已經用python完整實現了批量下載任意公眾號歷史文章的功能,1年前又用C#重寫了整個功能,做出了界面漂亮的軟件。為了避免讓小白誤以為本教程的終極目標是做一個圖形化的軟件我就不貼圖了。本教程是用python代碼實現批量下載功能,沒有圖形界面。重要的是讓大家體會到整個過程中的思路,這樣將來你想保存其他任何網站都不再是難事。

本人非計算機科班出身,在第一遍開發這套軟件的過程中走了許多彎路,踩了許多坑,雖然現在依然是個小白,但至少可以為大家理出一條稍好走的路。為方便大家理解和操作,有的地方會採用麻煩點但好理解的方案。

本教程的目的是讓有一定編程基礎,想自己寫個爬蟲,但是不知從何下手,或者多次嘗試過但多次卡殼的朋友能快速搭建出一個完整的系統。

我將盡量接地氣、以最簡潔的形式實現所有功能,所以,不要擔心完不成,多一點堅持,多給自己打打氣。

下面請由本人扮演的老兵給參加本次特訓營的朋友們開始講解:

公眾號文章不管是在PC端還是手機端還是瀏覽器中,其實都是以網頁的形式呈現的,而保存電腦上的網頁版最為方便。

工欲擅其事必先利其器,為照顧大多數人能聽懂下面可能有點囉嗦,但不難,而且學會了對以後大有幫助。

想下載網頁就要先研究網頁,它是由什麼組成的?從哪裡來的?

在chrome(QQ瀏覽器、360瀏覽器中應該有類似選項,但不推薦用IE)中打開任意一篇公眾號文章。

按F12鍵,或者在網頁上右鍵->"檢查",將打開如下圖所示的一個窗口,這個窗口的最左上角文字是"DevTools"直譯為"開發者工具",下面會經常提到。有的電腦上可能是將網頁窗口一分為二,下半部分彈出這個開發者工具窗口。顯示方式的不同可以通過點下圖中右上角的三個點切換,讀者視自己的電腦屏幕大小適當選擇即可。

一步步教你打造微信公眾號文章爬蟲(1)-綜述

再看上圖的第一行有許多標籤,我們需要用到"Elements","Network"兩個標籤。

先點"Elements",會看到許多有層次的格式化過的代碼,這其實就是網頁的html元素結構。先點擊下圖紅框所示的小圖標,然後將鼠標移動到文章的正文段落處,發現文字自動被選中一塊,同時右側會有一段與之對應的代碼也會變背景色。通過這種方式將源代碼與最終呈現的內容一一對應起來,這也是網頁編輯人員在調試時經常用到的方法。

一步步教你打造微信公眾號文章爬蟲(1)-綜述

來點有趣的,雙擊右側源代碼中的"一週前",然後將其修改為 "1986-01-01",回車,看看日期那裡是不是也變了?其實許多裝X的網頁截圖都不需要用PS,直接這樣改源代碼就可以了。

一步步教你打造微信公眾號文章爬蟲(1)-綜述

如果再刷新一下網頁,會發現剛才修改的內容又回到原始狀態了,因為我們剛才只是修改本地的內容,而刷新是從微信的服務器上又重新獲取了原始網頁。否則,如果我能這樣在銀行網站修改我的銀行存款就好了,哈哈。

再回到開發者工具窗口,點"Network"標籤,按F5刷新網頁(一定要先打開開發者工具再加載網頁它才能監測到數據的加載),會看到下面飛快得列出許多內容。不知道是些啥玩意?其實這是一個網頁要正常顯示需要下載的所有文件(比如圖片,css樣式表,js腳本等),一個看似簡單的網頁背後可能是由許多文件組成的(當然也可以只有一個文件),而我們要保存文章正是要把每一行所列出來的文件都保存下來。

單擊第一行(一定是第一行),窗口將變成下圖,在這個窗口的右半部分會列出當前選中的這一行的詳細請求內容。

下圖紅框中有一排標籤欄,不要抓狂,把這組標籤看完略枯燥的內容就結束了^_^

先點 Preview 標籤,好像顯示了一個網頁,再點 Response 標籤,好像是一個網頁的源代碼?對的,Response是原始代碼,Preview是將代碼轉化成網頁。

一步步教你打造微信公眾號文章爬蟲(1)-綜述

那麼,原始代碼是怎麼來的呢?點 Headers 標籤,看下圖,天吶,又是一堆英文,不急不急,都是些常見單詞,而且這些代碼其實是分三大塊,分別為"General"、"Response Headers"、"Request Headers",(當然有時候還會有更多塊)

一步步教你打造微信公眾號文章爬蟲(1)-綜述

謝天謝地,只需要看這三大塊的名字就可以了,不需要看裡面的內容。而這些數據塊正是對應著瀏覽器加載網頁的流程:

  1. General包含要向微信服務器請求的基礎數據,比如請求的網址,請求的方式。Request Headers中也是包含請求信息,比如瀏覽器是手機版的還是電腦版的,當前電腦環境是英文的還是中文的,有的需要會員登錄才能看的還會帶上會員信息(當然是加密過的)
  2. 瀏覽器把這些請求數據準備好,一起發送給微信服務器。微信服務器收到之後會在後臺找到這篇文章,併發回給瀏覽器。
  3. 瀏覽器會先檢查返回的 Response Headers,可以把它理解成返回的一本書的封皮,上面會寫著你想請求的那篇文章是返回成功了還是失敗了,文章一共有多長,等等。那我想看的文章呢?就是你剛才看到的Response標籤裡的那一堆代碼。瀏覽器會把它轉換為最終網頁的形式。

我花了許多篇幅向大家介紹chrome開發者工具,是因為這是爬蟲開發必備技能,但它又不是隻能為爬蟲開發者所用,希望大家能多多嘗試,反正怎麼搞又搞不壞,其中有趣的技巧還有許多哦。

小結:

  1. 學會使用chrome開發者工具分析和調試網頁。對網頁的加載流程有初步認識。有所收穫又似懂非懂中對接下來的學習有所期待

其實寫這種教程極易陷入明白的人不需要看,不明白的人看了依然不會的情況,所以我要講得足夠詳細,為了防止讀者看睡著了又得適當精煉。第一次寫教程,請多擔待。

接下來的章節就好辦了,因為有代碼寫,有數據顯示,相對來說生動了許多。

本文會同步在多個平臺,由於有的平臺發文後不可修改,所以勘誤和難點解釋請注意查看文後留言。

打算建個github項目,把代碼都上傳上去,也考慮建個QQ交流群。會在後續文章中公佈這些信息。對於本系列課程有啥建議也歡迎留言。

關注本號,查看後續更新。


分享到:


相關文章: